多个项目session被覆盖问题---两个web项目会导致shiro的session污染
- UID
- 1066743
|
多个项目session被覆盖问题---两个web项目会导致shiro的session污染
情况
遇到问题----shrio------shiro登录,多个项目session被覆盖问题---一个项目两个web模块会导致shiro的session污染
表现为 我在同一台机子上部署了两个都使用了shiro管理的web项目。
它们的访问路径除了端口不一样,ip是一样的。
当两个系统同时访问时,在一个系统中操作之后另一个系统就会自动退出登录。
但是 如果用域名访问就不会出现这个问题。
原因
web项目的session管理 cookie的名称冲突,两个web项目用了同样的cookie名一样导致的。
解决方法
修改设置cookie名称即可。
这个根据我们自己对项目的了解 cookie是在哪个地方设置的名称,一般有几个地方。
web.xml
一个是web.xml中
<session-config>
<cookie-config>
<name>_crmid</name>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
name这里设置成不一样的即可。
shiro.xml
shiro中可以设置sessionIdCookie.name
<!-- 会话Cookie模板 -->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="sid"/>
**<!--设置Cookie名字,默认为JSESSIONID-->
<property name="name" value="WEBSID" />**
</bean>
2个web模块,分别设置不同的sessionIdCookie的name即可。
还有另外一种是这样设置
<bean id="shiroSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="sessionDAO" ref="sessionDAO"/>
<property name="sessionValidationInterval" value="1800000"/> <!-- 相隔多久检查一次session的有效性 -->
<property name="globalSessionTimeout" value="1800000"/> <!-- session 有效时间为半小时 (毫秒单位)-->
<property name="sessionIdCookie.domain" value=".xxx.com"/>
<property name="sessionIdCookie.name" value="jsid"/>
<property name="sessionIdCookie.path" value="/"/>
<!-- 会话DAO -->
<bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">
<!-- 设置Session缓存名字,默认就是shiro-activeSessionCache,要和ehcache.xml中的那么对应 -->
<property name="activeSessionsCacheName" value="shiro-activeSessionCache"/>
<property name="sessionIdGenerator" ref="sessionIdGenerator"/>
</bean>
<!-- 会话ID生成器,用于生成会话ID,默认就是JavaUuidSessionIdGenerator,使用java.util.UUID生成-->
<bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/>
tomcat
最后tomcat的设置也有可能
tomcat下的server.xml中添加sessionCookieName,A项目设置为A_SESSION,B项目设置为B_SESSION。
<Context path="" docBase="webapp" debug="0" reloadable="false" sessionCookiePath="/" sessionCookieName="A_SESSION"/> |
|
|
|
|
|