简单的整合shiro和springmvc的例子
想要整合Shiro和springmvc,在网上找了很多例子,感觉都有一点复杂。所以就自己写了一个最简单整合项目,记录在这里以备后面查看。
这个例子包含如下三个部分:
1.简单的页面
2.shiro配置
3.springmvc配置
shiro可以直接和spring整合,但是这样需要单独配置spring用于整合shiro,在配置springmvc。配置文件看起来乱七八糟的。所以这里就shiro不采用spring来管理。因此这里的整合类似 shiro + servlet + springmvc。这样配置相对简单好理解。但也是最简单的配置,只能用于学习,用在实际项目中,还得改写。
下面是项目结构图(realm那个文件夹可有可没有,只是如果删除了,就需要将shiro.ini文件中 myrealm = shirospringweb.realm xxxx 那行删除掉)
下面是具体步骤
(1).添加依赖既然是简单,那引用也是最少的,具体如下
dependencies { // Use JUnit Jupiter for testing. testImplementation \'org.junit.jupiter:junit-jupiter:5.7.1\' // This dependency is used by the application. implementation \'com.google.guava:guava:30.1-jre\' // ++ Adding Spring dependencies implementation \'org.springframework:spring-context:5.3.9\' implementation \'org.springframework:spring-webmvc:5.3.9\' // ++ Using Servlet for SpringMvc implementation \'javax.servlet:javax.servlet-api:4.0.1\' // ++ Using shiro-web implementation \'org.apache.shiro:shiro-web:1.7.1\' }其中前面两个是建立项目自带的,所以只需要引用后面的四个包就可以咯
(2).Servlet中配置Shiro在servlet整合shiro,只需要在web.xml中引用shiro的上下文监听器(读取shiro配置文件),并配置shiro过滤器即可,具体如下:
<!-- Shiro直接拦截,不经过spring --> <listener> <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> </listener> <!-- 对应filter--> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> </filter> <!-- filter Mapping--> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>在web.xml中配置好shiro后,需要在WEB-INF文件夹下书写shiro.ini的配置文件,具体如下
[main] authc.loginUrl = /login authc.usernameParam = username authc.passwordParam = password authc.successUrl = / authc.failureKeyAttribute = shiroLoginFailure logout.redirectUrl = / myrealm = shirospringweb.realm.MyRealm [users] liang = 123, role1 wang = 123, role2 [urls] / = anon /test = anon /test2 = authc /login = authc /logout = logout /** = anon这样shiro就可以配合servlet工作了
(3).配置springMVC最简单springmvc的配置,只需要配置一个DispatcherServlet,并在其配置文件(resources/springmvc-base.xml)中打开包扫描,就好了,具体如下:
<!-- 配置SpringMVC --> <servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-base.xml</param-value> </init-param> </servlet> <!-- 对应servlet mapping --> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>resources/springmvc-base.xml的配置文件如下(主要是打开包扫描和注解驱动):
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/aop/spring-aop.xsd"> <context:component-scan base-package="shirospringweb.controller"/> <mvc:annotation-driven /> <!-- 用来处理当 DispatcherServlet 拦截全部请求的时候,它在RequestHandler处捡出静态资源的请求 --> <mvc:default-servlet-handler /> </beans>然后书写上面shiro配置文件中的对应controller和前端页面就可以了。具体如下:
3.1 TestController 及其页面