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
問題原因:沒有配置過濾器。