liuhuansir
V2EX  ›  Java

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

  •  
  •   liuhuansir · Feb 8, 2018 · 8774 views
    This topic created in 3016 days ago, the information mentioned may be changed or developed.

    最近搞这块儿的东西,整个流程倒是实现了,遇到一个问题,涉及到 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.

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

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

    或者直接用 nginx +插件 / haproxy 配置负载均衡, session 粘滞 就好了.
    qinxi
        3
    qinxi  
       Feb 8, 2018
    grq100296
        4
    grq100296  
       Feb 8, 2018
    去掉 shiro 的 session 管理器即可
    bobuick
        5
    bobuick  
       Feb 8, 2018
    proxy 接管 shiro 这块对 session 的管理
    liuhuansir
        6
    liuhuansir  
    OP
       Feb 8, 2018
    @grq100296 额,你是说不用 DefaultWebSessionManager,这个?
    grq100296
        7
    grq100296  
       Feb 8, 2018
    @liuhuansir 对,把这个去掉就行了,session 交给 redis
    top1ms
        8
    top1ms  
       Dec 26, 2018
    我目前也在做这个 遇见了 session 放 redis 反序列化出错的问题 我的问题是 SimpleSeesion vaild 这个属性 造成的 看了一下其他的解决方式 添加类 替换管理类 都比较麻烦 我目前的思路是 用一个 map 代理 SimpleSesssion 的参数 自定义的 SessionDAO doReadSession()方法中 再根据 map 里的值转换为 SimpleSession 如果不对 大佬萌指正吼
    mingzihentebie
        9
    mingzihentebie  
       May 7, 2019
    请问作者解决 sessionid 丢失的问题了吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5846 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 01:57 · PVG 09:57 · LAX 18:57 · JFK 21:57
    ♥ Do have faith in what you're doing.