java - 一个项目两个web模块会导致shiro的session污染,求助

 儒志楼 发布于 2022-10-29 12:41

您好,环境是这样的
模块admin
http://localhost:8081/admin/login 得到sessionid是

22:05:38 DEBUG net.sf.ehcache.Cache - Cache: admin-SessionCache store hit for 1a22b751-0542-4e74-a8e7-59942692f6ae

模块user
http://localhost:8082/user/login 得到sessionid是

22:07:01 DEBUG net.sf.ehcache.Cache - Cache: user-SessionCache store hit for 38c7d0d9-b13c-42f5-9e36-304838838c02

当admin登陆成功后,去刷新user(并不登陆,就在登陆页面刷新)
这个时候admin就会自动退出登陆,且提示

22:13:37 DEBUG o.a.shiro.web.servlet.SimpleCookie - Found 'sid' cookie value [38c7d0d9-b13c-42f5-9e36-304838838c02]
22:13:37 DEBUG net.sf.ehcache.Cache - mx-master-SessionCache cache - Miss
22:13:37 DEBUG o.a.shiro.mgt.DefaultSecurityManager - Resolved SubjectContext context session is invalid.  Ignoring and creating an anonymous (session-less) Subject instance.
org.apache.shiro.session.UnknownSessionException: There is no session with id [38c7d0d9-b13c-42f5-9e36-304838838c02]

user也会报错,提示

22:13:37 DEBUG o.a.shiro.web.servlet.SimpleCookie - Found 'sid' cookie value [1a22b751-0542-4e74-a8e7-59942692f6ae]
22:13:37 DEBUG net.sf.ehcache.Cache - mx-master-SessionCache cache - Miss
22:13:37 DEBUG o.a.shiro.mgt.DefaultSecurityManager - Resolved SubjectContext context session is invalid.  Ignoring and creating an anonymous (session-less) Subject instance.
org.apache.shiro.session.UnknownSessionException: There is no session with id [1a22b751-0542-4e74-a8e7-59942692f6ae]

两个id是串联起来了一样,求解决办法,但是如果这2个模块,在不同浏览器下,就不会出现这个问题,难道是session的name一样导致的吗?
admin覆盖user,或者user覆盖admin

4 个回答
  • 同一个域名服务器在客户端只能存在同一个key名的session或cookie,如果不希望互相干扰,可以把其中一个localhost改为其它名字,如'127.0.0.1'或者你自己的ip地址。

    2022-11-12 01:48 回答
  • 干得漂亮,我做毕业设计的时候就没考虑这个问题,演示的时候同时登管理员和售货员,直接挂了!把管理员和用户分成两个对象存吧!

    2022-11-12 01:48 回答
  • 试试spring-session呢

    2022-11-12 01:48 回答
  • 解决办法:

        <!-- 会话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即可

    感谢3楼的哥们(geshiwuyu)

    2022-11-12 01:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有