首页 > 解决方案 > 单击注销时如何从所有活动会话中注销?

问题描述

单击注销按钮时,我想从所有活动会话中注销。我的项目由 Groovy 在 Grails 2.3.8 上开发,也使用 spring-security 1.2.7

标签: sessiongrailsgroovyspring-securitylogout

解决方案


如果 allJSESSIONID的 cookie 在所有浏览器/选项卡/设备上都不同(我有 90 90% 的把握是),那么就没有现成的方法可以为它们删除 http 会话。

虽然建立这样的机制并不是什么大不了的事。您可以使用单例缓存,例如ConcurrentHashMap,以会话 ID 为键,并以用户 ID 为值。

您可以通过 填写单例HttpSessionListener,例如此处此处

现在,如果要删除所有用户的会话,则必须遍历地图,找到用户 ID 的所有条目并将其值设置为 eg null

另一个难题是before-filter 或 -interceptor。它应该检查缓存,如果条目有null而不是用户 ID,则执行注销。


推荐阅读