如何解决Spring Security Core插件-使用户会话无效
我正在使用grails 4.0.3,并且试图以编程方式注销用户。我进行了搜索,但是找到的所有解决方案都适用于grails 2,不适用于grails 4。
就像-force logout for authenticated user using spring security plugin
有人知道如何使用户会话无效吗?
解决方法
有人知道如何使用户会话无效吗?
在控制器中,您可以调用session.invalidate()
。
如果您想从其他上下文访问会话,则可以让该类实现grails.web.api.ServletAttributes
特性,它将为该类提供session
属性,然后session.invalidate()
从那里被召唤。
Jeff的解决方案仅适用于当前用户的会话。如果要注销/使所有会话(或特定用户的所有会话)无效,则可以使用此解决方案。
制作自定义会话侦听器类-
class MyCustomSessionListener implements HttpSessionListener {
Map<String,HttpSession> sessions = [:].asSynchronized()
void sessionCreated(HttpSessionEvent se) {
sessions.put(se.session.id,se.session)
}
void sessionDestroyed(HttpSessionEvent se) {
sessions.remove(se.session.id)
}
void invalidateAllSessionsOfUser(String username) {
List<HttpSession> sessionsList = []
sessions.each { sessionId,sess ->
SecurityContext sc = sess[SPRING_SECURITY_CONTEXT_KEY]
if (sc.authentication.principal.username == username) {
sessionsList.add(sess)
}
}
sessionsList*.invalidate()
}
void invalidateAllSessions() {
List<HttpSession> sessionsList = []
sessions.each { sessionId,sess ->
sessionsList.add(sess)
}
sessionsList*.invalidate()
}
}
并在resources.groovy
beans = {
myCustomSessionListener(MyCustomSessionListener)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。