做了redis shiro session缓存,但是登入成功后再连接,得不到sessionId,redis又生成一条session缓存,又跳转到登入界限,怎么回事
没有sessionId我怎么从redis读出session
问题在于多次SecurityUtils.getSubject()得到的不是一个对象
subject被重新bind了
结果
bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="userAuthorizingRealm"/>
<property name="rememberMeManager" ref="rememberMeManager"/>
<property name="sessionManager" ref="sessionManager"/>
<property name="cacheManager" ref="shiroCacheManager"/>
<property name="sessionMode" value="http"></property>
</bean>
加一个sessionMode解决问题,但是sessionMode已经过期了啊
找到病根DefaultWebSessionManager这个类居然是native的session
问题是<property name="sessionMode" value="http"></property>用了这个后不会更新redis session
找到原因是配置的问题
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="sessionDAO" ref="sessionDAO"/>
<property name="globalSessionTimeout" value="1800000"/>
<property name="sessionValidationInterval" value="120000"/>
<property name="sessionValidationSchedulerEnabled" value="true"/>
<!-- <property name="sessionIdCookie" ref="sessionIdCookie"/>
<property name="sessionIdCookieEnabled" value="true"/> -->
</bean>