gpt4 book ai didi

grails - grails springSecurityService.principal.id创建空异常,而不是重定向到登录页面

转载 作者:行者123 更新时间:2023-12-02 14:43:59 25 4
gpt4 key购买 nike

在我的开发过程中会定期发生此错误。给定一个 Controller :

class AccountController {
def index() {
User user = User.load(springSecurityService.principal.id)
//do something
}

....
}

我收到以下错误:
ERROR errors.GrailsExceptionResolver  - MissingPropertyException occurred when processing request: [GET] /account/index
No such property: id for class: java.lang.String. Stacktrace follows:
Message: No such property: id for class: java.lang.String

问题是我的用户不再登录,因此该 session 无效。 springSecurityService.principal为null,因此找不到ID。

但是我认为这是springsecurity应该在我的 Controller Action 到达之前默认处理的事情吗?它是否应该意识到 session 超时并重定向到登录页面?也许我没有正确配置一些东西。我真的不想在执行某些工作之前在每个 Controller / Action 中添加检查以查看主体是否有效。

我正在使用Grails 2.2.4和Spring Security Core插件1.2.7.3和Spring Security ui 0.2

最佳答案

如果您未将@Secured批注添加到 Controller 或操作中,也未将URL添加到数据库中Config.groovy或requestmap实例中配置的requestmap中,则 Controller 不 protected 。请查看docs以获取有关安全URL配置的更多信息。

由于 Controller 不 protected ,如果用户未登录,则不会将其重定向到登录页面。

如果用户通过身份验证,则springSecurityService.principal返回GrailsUser的实例。如果 session 超时(用户未通过身份验证),则将返回匿名用户名的名称(默认为'anonymousUser')。这是您的Exception的原因,因为String 'anonymousUser'没有属性id

要解决您的问题,请根据需要为 Controller 配置安全性约束,匿名用户将被重定向到登录页面。

要获得当前登录用户,您可以简单地使用springSecurityService.currentUser ...

希望能有所帮助。

关于grails - grails springSecurityService.principal.id创建空异常,而不是重定向到登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319070/

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