Grails:如何获取当前登录用户的用户名,以及需要哪些导入?

时间:2015-06-02 15:22:05

标签: authentication grails

我只需要当前登录用户的名字。使用<sec:username/>在gsp中显示的内容相同。我不知道该怎么做。 以前的答案和问题 - 它们似乎都需要一些重要的内容,而且这些解决方案都不适用于我:

具体来说,我想在控制器内部访问用户名并将其放入域实例的变量中,以便将其(与其他信息一起)保存到数据库中以进行日志记录。在控制器的内部,没有什么可以看到甚至远程指的是人/用户类,弹簧安全或任何其他听起来像它可能做我想要的事情。

2 个答案:

答案 0 :(得分:5)

您可以使用springSecurityService.currentUser访问与登录用户对应的域对象,然后从那里获取用户名(或您需要的任何其他属性)。由于Groovy的动态特性,您不需要导入域类或SpringSecurityService类来执行此操作,只需使用无类型依赖注入

def springSecurityService

您可以访问springSecurityService.currentUser?.username(或其他)。

尽管Burt在评论中指出,如果它只是您想要的用户名,那么使用springSecurityService.authentication.principal.username会更有效,因为这不需要从数据库加载用户对象。如果除了ID或用户名之外还需要用户对象的其他属性,则只需要currentUser

答案 1 :(得分:1)

刚想通了:在控制器中,class YourController {位于控制器类的开始括号之后(即def username = springSecurityService.authentication.principal.getUsername()),变量赋值如下所示:{{1显然正在玩some code posted here帮助了我。