Grails Spring Security(获取当前用户)

dre*_*dre 12 grails spring-security

是否有过以下情况:

def user = User.get(springSecurityService.principal.id)
Run Code Online (Sandbox Code Playgroud)

过度

def user = springSecurityService.currentUser
Run Code Online (Sandbox Code Playgroud)

我能想到的是阻止懒惰或确保您当前正在操作的数据不是陈旧的?

Dón*_*nal 16

实际上,我认为这两者之间并没有太大区别.我倾向于使用

def user = springSecurityService.currentUser
Run Code Online (Sandbox Code Playgroud)

因为它比另一种形式略短,这是插件文档推荐的内容,并且可能在插件中有一些额外的用户缓存(超出Hibernate已经提供的缓存).

更新

SpringSecurityService.getCurrentUser() 现在不推荐使用该方法,并根据javadoc注释

将在未来的版本中删除,无需替换,但有关于如何在应用程序中添加此功能的文档

就个人而言,我认为在不提供应该替换它的用法的指导的情况下标记弃用方法是不合理的,因此在上述文档可用之前,我倾向于继续使用它.


Jos*_*ore 7

嗯,两者之间略有不同.该文档点了这一点.

currentUser 将始终返回当前登录用户的域实例.

principal另一方面,检索当前登录的用户Principal.如果经过身份验证,则主体将是a grails.plugin.springsecurity.userdetails.GrailsUser,除非您已创建自定义UserDetailsService,在这种情况下,它将是UserDetails您在那里使用的任何实现.

如果未经过身份验证且处于AnonymousAuthenticationFilter活动状态(默认为true),则使用标准org.springframework.security.core.userdetails.User.

希望有助于澄清事情.