我正在使用Spring Security 3.1并且正在使用
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
有没有办法在浏览器关闭时强制关闭会话?我需要将max-sessions保持为1以进行并发控制。
谢谢!
答案 0 :(得分:3)
我会在&#34; CONCURRENT_SESSION_FILTER&#34;之前添加我自己的自定义过滤器。并检查请求URI中的字符串,如&#34; force-logout.do&#34; (或类似的东西)。
然后,在生成的HTML中,我将有一个像以下一样的JavaScript事件处理程序:
<script type="text/javascript">
function force_logout() {
// AJAX request to server notifying that the browser has been closed.
}
</script>
<body onbeforeunload="force_logout();">
</body>
这适用于IE和Firefox(您也应该检查其他浏览器)。您的过滤器只需要检查URI并执行session.invalidate()
,以防它与&#34;强制注销URI&#34;匹配。并立即返回或者只是绕过请求到过滤器链。
注意:我没有添加AJAX代码,因为我不知道您是否使用特定的AJAX框架。使用prototype.js会非常简单。
答案 1 :(得分:1)
我有类似的问题,比如
我在Spring安全文件中的代码是:
<session-management invalid-session-url="/?timeout=true">
<concurrency-control max-sessions="1" expired-url="/logout?timeout" />
我通过在web.xml文件中添加会话超时条目解决了这个问题。 我将会话超时值设为5分钟,构建应用程序并进行部署。 工作正常。
这可能会对某人有所帮助。
谢谢, 阿图尔