我是 shiro 的新手,所以这是我的问题:
我已经在 Tomcat 8 容器上使用 Spring WebMVC/Spring Framework (4.x) 将 Shiro 实现到一个应用程序中。角色和权限到目前为止工作正常,登录也是如此,但问题是,当我重新部署我的 war 文件/停止/重新启动服务器时, session 仍在工作,这不是这里的目的。
如果能提示我必须做些什么来在重新部署/重启服务器后实现所有登录用户的“自动注销”之类的东西,那就太好了,例如重定向到登录页面并显示模式或 s.th。说“由于[原因],您已注销”。
最好的问候, 多米尼克
最佳答案
您可以使用 SessionDAO 接口(interface),但您需要进行额外的配置才能让 shiro 使用 SessionDAO,如下所述:
http://shiro.apache.org/session-management.html#SessionManagement-SessionStorage
正确配置后,您可以执行以下操作:
DefaultSecurityManager securityManager = (DefaultSecurityManager) SecurityUtils.getSecurityManager();
DefaultSessionManager sessionManager = (DefaultSessionManager) securityManager.getSessionManager();
Collection<Session> activeSessions = sessionManager.getSessionDAO().getActiveSessions();
for (Session session: activeSessions){
session.stop();
}
只有,如果你想像你建议的那样收到消息,你不能在删除 session 后执行此操作,因为如果浏览器 session 已注销,服务器将不再有任何线索。
相反,您可以在 session.stop() 上方的数据库中写入一些内容,即设置一个标志,指示下一个请求应导致自动注销操作,您可能可以使用过滤器实现自动注销逻辑。
关于java - 使用 Shiro 和 Spring WebMVC(Java8、Spring 4.x)从 WebApp 注销所有仍登录的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782406/