shiro认证后 却没有执行 doGetAuthorizationInfo

作为一个新手之前一段时间开始使用的shiro,也有分享过一些shiro框架整合springmvc的内容。不过最近遇到一个问题困扰了我大半天,就是一个配置完整的shiro+springmvc项目只做了认证(doGetAuthenticationInfo)没做授权(doGetAuthorizationInfo),spring-shiro.xml文件如下:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">  
  5.   
  6.     <!-- 会话管理器 -->  
  7.     <bean id="sessionManager"  
  8.           class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">  
  9.         <property name="globalSessionTimeout" value="1800000"/>  
  10.         <property name="deleteInvalidSessions" value="true"/>  
  11.         <property name="sessionValidationSchedulerEnabled" value="true" />  
  12.         <property name="sessionValidationScheduler" ref="sessionValidationScheduler" />  
  13.         <property name="sessionDAO" ref="sessionDAO" />  
  14.         <property name="sessionIdCookieEnabled" value="true" />  
  15.         <property name="sessionIdCookie" ref="sessionIdCookie" />  
  16.         <property name="cacheManager" ref="cacheManager" />  
  17.     </bean>  
  18.   
  19.     <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">  
  20.         <property name="sessionIdGenerator" ref="sessionIdGenerator" />  
  21.         <property name="activeSessionsCacheName" value="shiro-activeSessionCache" />  
  22.     </bean>  
  23.   
  24.     <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/>  
  25.   
  26.     <!-- 会话验证调度器 -->  
  27.     <bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">  
  28.         <property name="interval" value="1800000" />  
  29.         <property name="sessionManager" ref="sessionManager" />  
  30.     </bean>  
  31.   
  32.     <!-- 安全管理器 -->  
  33.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  34.         <!-- 设置安全管理器的安全数据源为自定义的 Realm -->  
  35.         <!-- By default the servlet container sessions will be used.  Uncomment this line  
  36.             to use shiro's native sessions (see the JavaDoc for more): -->  
  37.         <!-- <property name="sessionMode" value="native"/> -->  
  38.         <property name="realm" ref="myRealm"/>  
  39.         <property name="sessionManager" ref="sessionManager"/>  
  40.         <property name="cacheManager" ref="cacheManager"/>  
  41.         <property name="rememberMeManager" ref="rememberMeManager" />  
  42.     </bean>  
  43.   
  44.     <!-- 配置缓存管理器 -->  
  45.     <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
  46.         <property name="cacheManagerConfigFile" value="classpath:/applicationContext/ehcache-shiro.xml"/>  
  47.     </bean>  
  48.   
  49.     <!-- rememberMe管理器 -->  
  50.     <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">  
  51.     <!-- rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)-->  
  52.     <property name="cipherKey"  
  53.     value="#{T(org.apache.shiro.codec.Base64).decode('3AvVhmFLUs0KTA3Kprsdag==')}"/>  
  54.     <property name="cookie" ref="rememberMeCookie"/>  
  55. </bean>  
  56.   
  57.     <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie" >  
  58.         <constructor-arg value="sid" />  
  59.         <property name="httpOnly" value="true" />  
  60.         <property name="maxAge" value="-1" /><!--每当浏览器关闭清除-->  
  61.     </bean>  
  62.     <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">  
  63.         <constructor-arg value="rememberMe"/>  
  64.         <property name="httpOnly" value="true"/>  
  65.         <property name="maxAge" value="604800"/> <!--7天 -->  
  66.     </bean>  
  67.   
  68.     <bean id="myRealm" class="com.clear.cnemc.realm.CustomRealm">  
  69.         <!-- 配置缓存相关 -->  
  70.         <!-- 启用缓存 -->  
  71.         <property name="cachingEnabled" value="true"/>  
  72.         <!-- 开启认证缓存-->  
  73.         <property name="authenticationCachingEnabled" value="true"/>  
  74.         <!-- 指定认证缓存的名字(与 ehcache.xml 中声明的相同) -->  
  75.         <property name="authenticationCacheName" value="authenticationCache"/>  
  76.         <!--开启授权缓存-->  
  77.         <property name="authorizationCachingEnabled" value="true"/>  
  78.         <!-- 指定授权缓存的名字(与 ehcache.xml 中声明的相同) -->  
  79.         <property name="authorizationCacheName" value="authorizationCache"/>  
  80.     </bean>  
  81.     <bean id="VcodeControlFilter" class="com.clear.api.web.system.VcodeControlFilter" />  
  82.     <bean id="KickoutSessionControlFilter" class="com.clear.api.web.system.KickoutSessionControlFilter" >  
  83.         <property name="sessionManager" ref="sessionManager"/>  
  84.         <property name="cacheManager" ref="cacheManager"/>  
  85.         <property name="kickoutAfter" value="false"/>  
  86.         <property name="maxSession" value="1"/>  
  87.         <property name="kickoutUrl" value="/login.jsp?kickout=1"/>  
  88.     </bean>   
  89.   
  90.     <!-- Shiro生命周期处理器 -->  
  91.     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>  
  92.   
  93.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  94.         <property name="securityManager" ref="securityManager"/>  
  95.         <property name="loginUrl" value="/login.jsp"/>  
  96.         <property name="unauthorizedUrl" value="/jsp/unauthorized.jsp"/>  
  97.         <property name="filterChainDefinitions">  
  98.             <value>  
  99.                 /unauthorized.jsp = anon  
  100.                 /login.jsp = anon,kscf  
  101.                 <!-- /sys/logout = logout -->  
  102.                 /jsp/** = authc,kscf  
  103.                 /sys/verificationCode = vcode  
  104.                 /resources/** = anon  
  105.                 /jsp/home.jsp = anon  
  106.             </value>  
  107.         </property>  
  108.         <property name="filters">  
  109.             <map>  
  110.                 <entry key="kscf" value-ref="KickoutSessionControlFilter" />  
  111.                 <entry key="vcode" value-ref="VcodeControlFilter" />  
  112.                 <entry key="IsLoginAccessControlFilter" value-ref="IsLoginAccessControlFilter" /> -->  
  113.             </map>  
  114.         </property>  
  115.     </bean>  
  116. </beans>  
那么我的是什么问题呢? 我先百度了一下,发现全都是说要在springmvc的配置文件(注意我展示的是shiro整合springmvc的配置文件)中添加
[html]  view plain  copy
  1. <aop:config proxy-target-class="true"/>  

但是从上面看出我并没有使用注解方式,而是直接在配置文件中绑定。所以可以直接pass,但是怎么找基本都是一个答案,这种不管什么都转载的真的很烦。不过最终还是找出了原因——是因为我的controller处理以后只返回了一个json然后就没有了,让我们结合下面的配置一起讲

[html]  view plain  copy
  1. <property name="filterChainDefinitions">  
  2.            <value>  
  3.                /unauthorized.jsp = anon  
  4.                /login.jsp = anon,kscf  
  5.                <!-- /sys/logout = logout -->  
  6.                /jsp/** = authc,kscf  
  7.                /sys/verificationCode = vcode  
  8.                /resources/** = anon  
  9.                /jsp/home.jsp = anon  
  10.            </value>  
  11.        </property>  
这里是默认的过滤器,其实授权是在地址变化的时候才会进行的行为,如果之前没有授权缓存,那么每当地址跳转时,就会调用doGetAuthorizationInfo,有缓存才去缓存,然后拦截器过滤没有权限的用户。所以,我就是因为没有跳转才没执行doGetAuthorizationInfo的。

对了,一开始我加上了跳转也没好,而是新建了也realm把之前一个的内容copy过去,然后就好了。这是我的编程工具的问题

猜你喜欢

转载自blog.csdn.net/qq_39081511/article/details/80407718