最近在整合了Spring+Shiro+Redis實作tomcat叢集session共享的問題之後,釋出以後運作以後發現老是會出現:org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的問題,具體問題如下截圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcukDZ4YWN1MWM5gTN3czYwEWNwEmN4czNhdTZwgDM1ATZfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
隻是以出現這個問題是因為在shiro的DefaultWebSessionManager類中,預設Cookie名稱是JSESSIONID,這樣的話與servlet容器名沖突, 如jetty, tomcat等預設JSESSIONID, 當跳出shiro servlet時如error-page容器會為JSESSIONID重新配置設定值導緻登入會話丢失!
明白了出現這個問題的原因,就好辦了,我們隻需要自己指定一個與項目運作容器不沖突的sessionID就好了,具體如下,在spring-shiro.xml中進行如下配置: