session - 单击注销时如何从所有活动会话中注销?
问题描述
单击注销按钮时,我想从所有活动会话中注销。我的项目由 Groovy 在 Grails 2.3.8 上开发,也使用 spring-security 1.2.7
解决方案
如果 allJSESSIONID
的 cookie 在所有浏览器/选项卡/设备上都不同(我有 90 90% 的把握是),那么就没有现成的方法可以为它们删除 http 会话。
虽然建立这样的机制并不是什么大不了的事。您可以使用单例缓存,例如ConcurrentHashMap
,以会话 ID 为键,并以用户 ID 为值。
您可以通过 填写单例HttpSessionListener
,例如此处或此处
现在,如果要删除所有用户的会话,则必须遍历地图,找到用户 ID 的所有条目并将其值设置为 eg null
。
另一个难题是before
-filter 或 -interceptor。它应该检查缓存,如果条目有null
而不是用户 ID,则执行注销。
推荐阅读
- oracle - 将 LISTAGG 转换为 XMLAGG
- c# - Xamarin - NavigationPage.TitleView 内的 StackLayout 不会使用所有空间?
- regex - 正则表达式只选择点但前后不应该有任何数字
- azure-iot-central - 无法使用 X509 证书连接到 IoT Central
- mongodb - MongoDB 通过减少一个百分比来更新值
- vba - 在 Access 报表上使用 Select 查询
- javascript - Typescript 编译的 Javascript 代码不起作用(variable.default.function())
- javascript - 无法使用 JS 访问 svg 中的元素
- python - 查找列表中的下一个元素
- java - 递归定义中的堆栈溢出错误