首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

多个项目session被覆盖问题---两个web项目会导致shiro的session污染

多个项目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"/>
返回列表