我对shiro相当陌生,所以我的问题是:
我已经在Tomcat 8容器上使用Spring WebMVC/Spring Framework (4.x)将Shiro实现到应用程序中。到目前为止,角色和权限工作正常,登录也是,但问题是,当我重新部署我的war-file/停止/重新启动服务器时,会话仍然工作,这不是这里的目的。
将是伟大的得到一个提示,我要做的是实现的东西,像所有登录的用户的"自动注销"后重新部署/重启服务器,例如重定向到loginpage和显示一个模态或s.th。提示"由于[原因],您已退出登录"。
最诚挚的问候,杜米尼克
您可以使用SessionDAO接口,但是您需要做额外的配置,以便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();
}
只是,如果你想要像你建议的那样有一个消息,你不能在删除会话后这样做,因为服务器不再知道浏览器会话是否注销。
相反,你可以做的是写一些东西到db上面的session.stop(),即设置一个标志,下一个请求应该导致自动退出的动作,你可能会实现自动退出逻辑使用过滤器