首页 > 技术文章 > shiro中出现不同请求session不同的现象

chen-hui 2019-06-02 19:46 原文

Shiro提供了三个默认实现:

DefaultSessionManager:DefaultSecurityManager使用的默认实现,用于JavaSE环境;

ServletContainerSessionManager:DefaultWebSecurityManager使用的默认实现,用于Web环境,其直接使用Servlet容器的会话;

DefaultWebSessionManager:用于Web环境的实现,可以替代ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管理。

参考地址:https://blog.csdn.net/baicp3/article/details/45840645

 

遇到的坑:

在web环境下用ini文件配置shiro时,如果不指定SecurityManager时,shiro会默认创建DefaultSecurityManager对象,这样会导致在web环境下,发不同的请求生成的session不同,导致登录功能失效。因为DefaultSessionManager在源码中是和本地线程绑定的,而web环境中一个请求会创建一个线程,从而导致session都不同。

当使用DefaultWebSessionManager时,shiro中的session和web中的session是一致的。而DefaultSessionManager的session和web中的session是不一致的。

 

遇到的一个异常:

https://www.cnblogs.com/ningheshutong/p/6478080.html

问题原因:没有配置过滤器。

推荐阅读