java - 使用 Shiro 和 Spring WebMVC(Java8、Spring 4.x)从 WebApp 注销所有仍登录的用户

标签 java spring-mvc session-timeout shiro tomcat8

我是 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/

相关文章:

java - session 超时参数是否杀死对象或对象保留在内存中?

java - 限制Java中方法调用的访问

java - Java 中的使用领域限制?

java - Cucumber-Appium - 如果在@Before 中初始化驱动程序,则将 Hooks 存储在何处

Java - 如何通过HTTP请求而不是文件读取xls格式数据

session - Vaadin session setMaxInactiveInterval UI 响应不一致

java - 将 JSP 页面转换为 servlet

java - 运行 TomCat 时 Intellij 中的安全错误

unit-testing - Spring Aspect 未在单元测试中触发

JBoss session 超时