Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Shiro和SpringWebMVC(Java8,Spring4.x)从WebApp注销所有仍然登录的用户_Java_Spring Mvc_Session Timeout_Shiro_Tomcat8 - Fatal编程技术网

使用Shiro和SpringWebMVC(Java8,Spring4.x)从WebApp注销所有仍然登录的用户

使用Shiro和SpringWebMVC(Java8,Spring4.x)从WebApp注销所有仍然登录的用户,java,spring-mvc,session-timeout,shiro,tomcat8,Java,Spring Mvc,Session Timeout,Shiro,Tomcat8,我是shiro的新手,所以我的问题是: 我已经在Tomcat8容器上使用SpringWebMVC/SpringFramework(4.x)将Shiro实现到一个应用程序中。到目前为止,角色和权限工作正常,登录也正常,但问题是,当我重新部署war文件/停止/重新启动服务器时,会话仍在工作,这在这里并不适用 如果能得到一个提示,我应该做些什么来实现重新部署/重新启动服务器后所有登录用户的“自动注销”,例如重定向到loginpage并显示模式或s.th。说“由于[原因]您已注销” 致以最良好的祝愿,

我是shiro的新手,所以我的问题是:

我已经在Tomcat8容器上使用SpringWebMVC/SpringFramework(4.x)将Shiro实现到一个应用程序中。到目前为止,角色和权限工作正常,登录也正常,但问题是,当我重新部署war文件/停止/重新启动服务器时,会话仍在工作,这在这里并不适用

如果能得到一个提示,我应该做些什么来实现重新部署/重新启动服务器后所有登录用户的“自动注销”,例如重定向到loginpage并显示模式或s.th。说“由于[原因]您已注销”

致以最良好的祝愿,
Dominik

您可以使用SessionDAO接口,但您需要进行额外配置,让shiro使用SessionDAO,如下所述:

正确配置后,您可以执行以下操作:

    DefaultSecurityManager securityManager = (DefaultSecurityManager) SecurityUtils.getSecurityManager();
    DefaultSessionManager sessionManager = (DefaultSessionManager) securityManager.getSessionManager();
    Collection<Session> activeSessions = sessionManager.getSessionDAO().getActiveSessions();
    for (Session session: activeSessions){
         session.stop();
    }
DefaultSecurityManager securityManager=(DefaultSecurityManager)SecurityUtils.getSecurityManager();
DefaultSessionManager会话管理器=(DefaultSessionManager)securityManager.getSessionManager();
集合activeSessions=sessionManager.getSessionDAO().getActiveSessions();
用于(会话:activeSessions){
session.stop();
}
只是,如果您希望获得您建议的消息,则在删除会话后无法执行此操作,因为如果浏览器会话已注销,服务器将不再有任何线索


相反,您可以在session.stop()上方的数据库中写入一些内容,即设置一个标志,表示下一个请求将导致自动执行操作,您可能可以使用过滤器实现自动执行逻辑。

感谢您的回答,这在某种程度上为我指明了正确的方向。我现在只使用container/tomcat的“autologue”特性,因为它适合我的需要。查看此处了解更多详细信息:我们对应用程序也这样做。省去了我们很多麻烦。