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
问题原因:没有配置过滤器。