您的位置:首页 > 其它

遇到问题----shrio------shiro登录,多个项目session被覆盖问题---两个web项目会导致shiro的session污染

2017-03-08 20:22 1281 查看

情况

遇到问题----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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐