下一站_上海 2019-06-02 10:08 采纳率: 0%
浏览 3084
已结题

springboot中过滤器获取不到shiro自带的session中的值,怎么解决?

springboot中过滤器获取不到shiro自带的session中的值,

  • 写回答

3条回答 默认 最新

  • weixin_45168001 2019-06-02 10:39
    关注

    问题起因是这样的,有两套系统,系统a和系统b。两套系统均使用shiro做的权限管理,之前部署在两台机器上。使用浏览器打开a系统后另开页签打开b系统,互不干扰都能正常使用,后因业务迁移,两套系统部署到了一个机器上,再使用浏览器打开a系统后再开b系统。问题就出现了,之前a系统要求重新登录。

        原因分析,shiro是基于session会话的权限管理,那么浏览器打开一次就会产生一个session,在session活跃期间,只要你浏览器不关闭,session信息是一直有效的。其session信息是写在cookie里的。如果你是两个域的话,session信息不回互相干扰。但如果你是一个域问题就来了,a登录后session信息会写入浏览器cookie里,当b登录时session信息更新此域的信息。a原始登录的session信息就会失效。因此b登录后,会挤占a的session信息
    

    原因分析明白,如何解决,其实很简单:

    在shiro配置文件的sessionManager()方法里修改session的key值

    1
    2
    3
    4
    5
    6
    7
    8
    @Bean
    public DefaultWebSessionManager sessionManager() {
    DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
    Cookie cookie=sessionManager.getSessionIdCookie();
    cookie.setName("newsessid");
    return sessionManager;

    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置