V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuhuansir
V2EX  ›  Java

咨询 spring+shiro+redis 做 session 共享问题

  •  
  •   liuhuansir · 2018-02-08 12:10:42 +08:00 · 8047 次点击
    这是一个创建于 2505 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近搞这块儿的东西,整个流程倒是实现了,遇到一个问题,涉及到 shiro 的源码,具体问题是:shiro 的 Session 类通过序列化存储在 redis 的时候,Session 的某些字段丢失了,我看了它的实现类 SimpleSession,丢失的字段被 transient 修饰了,导致这些字段没被序列化,问题来了,login 之后,session 被保存了,其他接口请求的时候,shiro 会去 redis 里获取该用户的 session,然后 sessionId 丢失了,报了如下异常:java.lang.IllegalArgumentException: The org.apache.shiro.session.mgt.DelegatingSession implementation requires that the SessionKey argument returns a non-null sessionId to support the Session.getId() invocations.

    第 1 条附言  ·  2018-02-08 13:06:07 +08:00
    额,1,2 楼,我主要是为了用 shiro 做安全认证,和权限管理,所以才使用这种方式;我也是刚从 android 转到 Java 后台开发的,先熟悉下 spring 和 springmvc,spring boot 这种一站式的以后再研究吧
    9 条回复    2019-05-07 14:18:15 +08:00
    liuhuansir
        1
    liuhuansir  
    OP
       2018-02-08 12:15:09 +08:00
    可能说的不够清楚,求好心人解答,有疑问可以提出来
    azhw
        2
    azhw  
       2018-02-08 12:43:26 +08:00
    以前考虑过这种方案, 有点麻烦放弃了.

    tomcat 好像有个 redis 插件的, 直接配置下 xml 就可以 session 保存到 redis 中共享.
    缺点: tomcat 版本好像有限制.

    或者直接用 nginx +插件 / haproxy 配置负载均衡, session 粘滞 就好了.
    qinxi
        3
    qinxi  
       2018-02-08 12:50:28 +08:00
    grq100296
        4
    grq100296  
       2018-02-08 14:05:47 +08:00
    去掉 shiro 的 session 管理器即可
    bobuick
        5
    bobuick  
       2018-02-08 14:26:37 +08:00
    proxy 接管 shiro 这块对 session 的管理
    liuhuansir
        6
    liuhuansir  
    OP
       2018-02-08 14:29:56 +08:00
    @grq100296 额,你是说不用 DefaultWebSessionManager,这个?
    grq100296
        7
    grq100296  
       2018-02-08 15:01:24 +08:00
    @liuhuansir 对,把这个去掉就行了,session 交给 redis
    top1ms
        8
    top1ms  
       2018-12-26 09:47:28 +08:00
    我目前也在做这个 遇见了 session 放 redis 反序列化出错的问题 我的问题是 SimpleSeesion vaild 这个属性 造成的 看了一下其他的解决方式 添加类 替换管理类 都比较麻烦 我目前的思路是 用一个 map 代理 SimpleSesssion 的参数 自定义的 SessionDAO doReadSession()方法中 再根据 map 里的值转换为 SimpleSession 如果不对 大佬萌指正吼
    mingzihentebie
        9
    mingzihentebie  
       2019-05-07 14:18:15 +08:00
    请问作者解决 sessionid 丢失的问题了吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2922 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:41 · PVG 22:41 · LAX 06:41 · JFK 09:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.