有兩個項目都使用了shiro權限校驗框架,且部署在一臺服務器下兩個Tomcat中。
測試時發現在一個瀏覽器中,登錄A後,再登錄B。這時A失效,需要重新登錄,且登錄後B又失效。
查看log後發現是cookieId相同的原因。
先排查tomcat。
在tomcat下的server.xml中添加sessionCookieName,A項目設置爲A_SESSION,B項目設置爲B_SESSION。測試後發現問題依然存在。
<Context path="" docBase="webapp" debug="0" reloadable="false" sessionCookiePath="/" sessionCookieName="A_SESSION"/>
說明session不是由tomcat管理的,再排查shiro配置文件。發現可以設置sessionIdCookie.name,設置後重啓,問題解決。
配置如下:
<!-- session管理類 -->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="sessionDAO" ref="sessionDAO"/>
<!-- session過期時間 -->
<property name="globalSessionTimeout" value="1800000"/>
<!-- cookie名稱 -->
<property name="sessionIdCookie.name" value="managerid"/>
<!-- cookie生效路徑 -->
<property name="sessionIdCookie.path" value="/"/>
</bean>