gpt4 book ai didi

grails - Grails springSecurityService.currentUser返回null

转载 作者:行者123 更新时间:2023-12-02 14:19:09 40 4
gpt4 key购买 nike

我有这个服务类:

class UserService {

def springSecurityService

@Listener(topic = 'currentUser', namespace = 'auth')
public User getCurrentUser(){
return springSecurityService.currentUser
}

def authenticate(OAuthToken oAuthToken){
SecurityContextHolder.context.authentication = oAuthToken
return springSecurityService.currentUser
}
}

如果我使用authenticate方法,则 springSecurityService.currentUser返回当前用户。但是,如果我已经登录,则想使用 getCurrentUser方法获取当前用户,并且该方法返回null。我调试了 Springsecurityservice.getCurrentUser方法,该方法“isLoggedIn”返回false。

但是,如果我认为此方法有效,则可以:
<sec:ifLoggedIn>Yeeees</sec:ifLoggedIn>

更新:

当我运行 UserService.getCurrentUser时,SecurityService中的SCH.context.authentication返回null。调用之后,将呈现 View ,并且 SCH.context.authentication返回正确的身份验证。

更新2:

我分析了它,并且似乎只有将其与事件总线一起使用时,它才会发生。如果我直接从 Controller 调用getCurrentUser,它可以正常工作,但是如果使用事件总线,则不能。
我使用平台核心插件中的事件总线。事件总线是否还有另一个SCH.context?

最佳答案

我找到了解决方案。问题在于事件总线在线程内工作,并且默认情况下不会将spring上下文传递给线程。

配置中的选项“上下文持有者策略”可以解决此问题:

grails.plugin.springsecurity.sch.strategyName = org.springframework.security.core.context.SecurityContextHolder.MODE_INHERITABLETHREADLOCAL

http://grails-plugins.github.io/grails-spring-security-core/latest/#miscProperties

关于grails - Grails springSecurityService.currentUser返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29536994/

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