spring 安全核心插件 - 使用户会话无效
spring security core plugin - invalidate a user session
我正在使用 grails 4.0.3 并且我正在尝试以编程方式注销用户。我搜索了这个,但我找到的所有解决方案都适用于 grails 2,不适用于 grails 4。
喜欢 - force logout for authenticated user using spring security plugin
有人知道如何使用户会话无效吗?
Does anyone have any idea how to invalidate a user session?
在控制器中,您可以调用 session.invalidate()
。
如果你想从其他上下文访问会话,你可以让 class 实现 grails.web.api.ServletAttributes
特性,这将提供 session
属性 class 然后 session.invalidate()
可以从那里调用。
Jeff 的解决方案仅适用于当前用户的会话。如果您想 logout/invalidate 所有会话(或特定用户的所有会话),那么您可以使用此解决方案。
制作自定义会话侦听器class-
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)
}
我正在使用 grails 4.0.3 并且我正在尝试以编程方式注销用户。我搜索了这个,但我找到的所有解决方案都适用于 grails 2,不适用于 grails 4。
喜欢 - force logout for authenticated user using spring security plugin
有人知道如何使用户会话无效吗?
Does anyone have any idea how to invalidate a user session?
在控制器中,您可以调用 session.invalidate()
。
如果你想从其他上下文访问会话,你可以让 class 实现 grails.web.api.ServletAttributes
特性,这将提供 session
属性 class 然后 session.invalidate()
可以从那里调用。
Jeff 的解决方案仅适用于当前用户的会话。如果您想 logout/invalidate 所有会话(或特定用户的所有会话),那么您可以使用此解决方案。
制作自定义会话侦听器class-
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)
}