1. 程式人生 > >解決org.apache.shiro.session.UnknownSessionException: There is no session with id的問題

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

com ebs iss 運行 session共享 tex 童鞋 tor jet

一、背景

  最近在整合了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

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