#项目改造
我引入的spring-shiro.xml
```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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<description>shiro权限配置</description>
<!-- jdbc realm -->
<bean id="shiroSampleRealm" class="com.iyunche.omp.server.service.impl.AuthorizingServiceImpl">
<property name="cacheManager" ref="cacheManager" />
<property name="credentialsMatcher">
<bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<!--加密的策略-->
<property name="hashAlgorithmName" value="MD5"/>
<property name="hashIterations" value="1" />
<property name="storedCredentialsHexEncoded" value="true" />
</bean>
</property>
</bean>
<!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- realm配置 -->
<property name="realm" ref="shiroSampleRealm" />
<!-- 记住我 -->
<property name="rememberMeManager" ref="cookieRememberMeManager" />
<!-- 定义要使用的session管理器 -->
<property name="sessionManager" ref="sessionManager"/>
</bean>
<!-- 缓存管理器 -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml" />
</bean>
<bean id="permission" class="com.iyunche.omp.web.framework.authz.PermissionFilter" />
<bean id="expireSessionFilter" class="com.iyunche.omp.web.framework.authz.SessionExpireFilter"></bean>
<!-- shiro 过滤器 -->
<bean id="shiroFilter"
class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- 登录页 -->
<property name="loginUrl" value="/loginToPage" />
<!-- 登录跳转主页 -->
<property name="successUrl" value="/main" />
<property name="unauthorizedUrl" value="/unauthorized"></property>
<property name="filterChainDefinitionMap" value="#{permissionService.loadPermission()}" />
<property name="filters">
<map>
<entry key="permission" value-ref="permission" />
<entry key="expireSessionFilter" value-ref="expireSessionFilter" />
</map>
</property>
</bean>
<!-- 定义Session ID生成器 -->
<bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator" />
<!-- 配置Session DAO的操作处理 -->
<bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">
<!-- 设置session缓存的名字,这个名字可以任意 -->
<property name="activeSessionsCacheName" value="shiro-activeSessionCache"/>
<!-- 定义该Session DAO操作中所使用的ID生成器 -->
<property name="sessionIdGenerator" ref="sessionIdGenerator"/>
</bean>
<!-- 配置需要向Cookie中保存数据的配置模版 -->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<!-- 在Tomcat运行下默认使用的Cookie的名字为JSESSIONID -->
<constructor-arg value="JSESSIONID"/>
<!-- 保证该系统不会受到跨域的脚本操作供给 -->
<property name="httpOnly" value="true"/>
<!-- 定义Cookie的过期时间,单位为秒,如果设置为-1表示浏览器关闭,则Cookie消失 -->
<property name="maxAge" value="-1"/>
</bean>
<!-- 定义会话管理器的操作 -->
<bean id="sessionManager"
class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<!-- 定义的是全局的session会话超时时间,此操作会覆盖web.xml文件中的超时时间配置 1800000 单位毫秒 -->
<property name="globalSessionTimeout" value="#{24*60*60*1000}"/>
<!-- 删除所有无效的Session对象,此时的session被保存在了内存里面 -->
<property name="deleteInvalidSessions" value="true"/>
<!-- 定义要使用的无效的Session定时调度器 -->
<property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
<!-- 需要让此session可以使用该定时调度器进行检测 -->
<property name="sessionValidationSchedulerEnabled" value="true"/>
<!-- 定义Session可以进行序列化的工具类 -->
<property name="sessionDAO" ref="sessionDAO"/>
<!-- 所有的session一定要将id设置到Cookie之中,需要提供有Cookie的操作模版 -->
<property name="sessionIdCookie" ref="sessionIdCookie"/>
<!-- 定义sessionIdCookie模版可以进行操作的启用 -->
<property name="sessionIdCookieEnabled" value="true"/>
</bean>
<!-- 配置session的定时验证检测程序类,以让无效的session释放 -->
<bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
<!-- 间隔执行时间 毫秒 -->
<property name="interval" value="#{30*1000}"></property>
<property name="sessionManager" ref="sessionManager"></property>
</bean>
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<!-- 设置Cookie在浏览器中保存内容的名字,由用户自己来设置 -->
<constructor-arg value="wms-cookie"></constructor-arg>
<!-- 保证该系统不会受到跨域的脚本操作攻击 -->
<property name="httpOnly" value="true"></property>
<!-- 定义Cookie的过期时间,单位为秒,如果设置为-1标识浏览器关闭就失效 -->
<property name="maxAge" value="#{3*24*60*60}"></property>
</bean>
<!-- 配置RememberMe功能的程序管理类 -->
<bean id="cookieRememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cookie" ref="rememberMeCookie"></property>
</bean>
<!-- Shiro life Processor -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
</beans>
shiroFilter中有loginUrl->/loginToPage(对应controler-jsp页码),出现问题: ERR_TOO_MANY_REDIRECTS,
loginToPage我已配置anon放行,也执行到了,但是还是报错。去掉shiro配置,可以正常访问页面
使用的框架是:springboot+shiro+springcloud这套,项目是旧项目改造。
也尝试配置DelegatingFilterProxy,依然出现:ERR_TOO_MANY_REDIRECTS
项目没有引用shiro相关的starter,只用spring-shiro web这些依赖