单击注销按钮时,我希望从所有活动会话中注销。我的项目是由Groovy在Grails 2.3.8上开发的,并且还使用了spring-security 1.2.7
如果在所有浏览器/标签页/设备上所有JSESSIONID的库位都不相同(我90%确信它们是90%,那么就没有现成的方法来删除它们的http会话。
JSESSIONID
尽管建立这样的机制并不重要。您可以使用单例缓存,例如ConcurrentHashMap,以会话ID为键,并以用户ID赋值。
ConcurrentHashMap
您可以通过HttpSessionListener填充单例,例如here或here
HttpSessionListener
现在,如果要删除所有用户会话,则必须遍历地图,找到用户ID的所有条目,并将其值设置为例如null。
null
另一个难题是before-过滤器或-拦截器。它应该检查缓存,并在条目具有null而不是用户ID的情况下执行注销。
before