解決org.apache.shiro.session.UnknownSessionException: There is no session with id的問題

阿豪聊乾貨發表於2017-07-27

一、背景

  最近在整合了Spring+Shiro+Redis實現tomcat叢集session共享的問題之後,釋出以後執行以後發現老是會出現:org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的問題,具體問題如下截圖:

二、出現這個問題的原因

  只所以出現這個問題是因為在shiro的DefaultWebSessionManager類中,預設Cookie名稱是JSESSIONID,這樣的話與servlet容器名衝突, 如jetty, tomcat等預設JSESSIONID, 當跳出shiro servlet時如error-page容器會為JSESSIONID重新分配值導致登入會話丟失!

  明白了出現這個問題的原因,就好辦了,我們只需要自己指定一個與專案執行容器不衝突的sessionID就好了,具體如下,在spring-shiro.xml中進行如下配置:

 <!--sessionManager -->
 <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
    <property name="sessionDAO" ref="redisSessionDAO" />
    <property name="sessionIdCookie" ref="simpleCookie"/>
 </bean>

 <bean id="simpleCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
    <constructor-arg name="name" value="shiro.sesssion"/>
    <property name="path" value="/"/>
 </bean>

這樣,我們就很完美的解決了這個問題!至於想知道spring+shiro+redis整合實現tomcat叢集session共享的童鞋,請移步:Shrio+Redis實現tomcat叢集共享session

 

相關文章