shiro 与 springMVC 集成

匿名 (未验证) 提交于 2019-12-03 00:21:02

1 配置web.xml

	<!-- 配置Shiro过滤器,先让Shiro过滤系统接收到的请求 -->     <!-- 这里filter-name必须对应applicationContext.xml中定义的<bean id="shiroFilter"/> -->     <!-- 使用[/*]匹配所有请求,保证所有的可控请求都经过Shiro的过滤 -->     <!-- 通常会将此filter-mapping放置到最前面(即其他filter-mapping前面),以保证它是过滤器链中第一个起作用的 -->     <filter>         <filter-name>shiroFilter</filter-name>         <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>         <init-param>             <!-- 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 -->             <param-name>targetFilterLifecycle</param-name>             <param-value>true</param-value>         </init-param>     </filter>     <filter-mapping>         <filter-name>shiroFilter</filter-name>         <url-pattern>/*</url-pattern>     </filter-mapping>

由于项目通过Spring管理,因此所有的配置原则上都是交给Spring。DelegatingFilterProxy的功能是通知Spring将所有的Filter交给ShiroFilter管理。

<beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"     xmlns:context="http://www.springframework.org/schema/context"     xmlns:mvc="http://www.springframework.org/schema/mvc"     xsi:schemaLocation="http://www.springframework.org/schema/beans                             http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                             http://www.springframework.org/schema/context                             http://www.springframework.org/schema/context/spring-context-3.1.xsd                             http://www.springframework.org/schema/mvc                             http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">      <!-- 缓存管理器 使用Ehcache实现 -->     <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">         <property name="cacheManagerConfigFile" value="classpath:ehcache.xml" />     </bean>      <!-- 凭证匹配器 -->     <bean id="credentialsMatcher" class="utils.RetryLimitHashedCredentialsMatcher">         <constructor-arg ref="cacheManager" />         <property name="hashAlgorithmName" value="md5" />         <property name="hashIterations" value="2" />         <property name="storedCredentialsHexEncoded" value="true" />     </bean>      <!-- Realm实现 -->     <bean id="userRealm" class="utils.UserRealm">         <property name="credentialsMatcher" ref="credentialsMatcher" />     </bean>      <!-- 安全管理器 -->     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">         <property name="realm" ref="userRealm" />     </bean>      <!-- Shiro的Web过滤器 -->     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">         <property name="securityManager" ref="securityManager" />         <property name="loginUrl" value="/" />         <property name="unauthorizedUrl" value="/" />         <property name="filterChainDefinitions">             <value>                 /authc/admin = roles[admin]                 /authc/** = authc                 /** = anon             </value>         </property>     </bean>      <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /> </beans>

3: 拦截器

Shiro对Servlet容器的FilterChain进行了代理,即ShiroFilter在继续Servlet容器的Filter链的执行之前,通过ProxiedFilterChain对Servlet容器的FilterChain进行了代理;即先走Shiro自己的Filter体系,然后才会委托给Servlet容器的FilterChain进行Servlet容器级别的Filter链执行;Shiro的ProxiedFilterChain执行流程:1、先执行Shiro自己的Filter链;2、再执行Servlet容器的Filter链(即原始的Filter)。

默认拦截器




标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!