gpt4 book ai didi

grails - Ra-在 Grails 应用程序中对更改后的用户进行身份验证

转载 作者:行者123 更新时间:2023-12-02 09:07:31 25 4
gpt4 key购买 nike

我想立即在我的 Grails 应用程序中传播用户更改(用户角色的更改)(我正在使用 Spring Security 插件)。

我发现了这个:

springSecurityService.reauthenticate(userName)

但这适用于当前登录的用户,不适用于更改用户!

是否有任何简单的解决方案(甚至强制注销已更改的用户就足够了)。

这种情况的用例是管理员更改其他用户角色。如果更改后的用户已登录,则在 Spring Security 上下文中不会立即看到角色更改。

最佳答案

感谢 Fabiano,我提供了以下有效的解决方案:

资源.groovy

import org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy
import org.springframework.security.web.session.ConcurrentSessionFilter
import org.springframework.security.core.session.SessionRegistryImpl
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy

// Place your Spring DSL code here
beans = {
// bind session registry
sessionRegistry(SessionRegistryImpl)

sessionAuthenticationStrategy(ConcurrentSessionControlStrategy, sessionRegistry) {
maximumSessions = -1
}

concurrentSessionFilter(ConcurrentSessionFilter){
sessionRegistry = sessionRegistry
expiredUrl = '/login/concurrentSession'
}
}

MyService.groovy

def sessionRegistry

def expireSession(User user) {
def userSessions = sessionRegistry.getAllSessions(user, false)
// expire all registered sessions
userSessions.each {
log.debug "Expire session [$it] of the user [$user]"
it.expireNow()
}
}

很简单:-)

更新:

另外,不要忘记注册 HttpSessionEventPublisher 并根据 Filter Documentations 使用不同的方式将并发 session 过滤器添加到 Config.groovy 中。 .

web.xml

<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>

关于grails - Ra-在 Grails 应用程序中对更改后的用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11247495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com