我只需要当前登录用户的名字。使用<sec:username/>
在gsp中显示的内容相同。我不知道该怎么做。
以前的答案和问题 - 它们似乎都需要一些重要的内容,而且这些解决方案都不适用于我:
具体来说,我想在控制器内部访问用户名并将其放入域实例的变量中,以便将其(与其他信息一起)保存到数据库中以进行日志记录。在控制器的内部,没有什么可以看到甚至远程指的是人/用户类,弹簧安全或任何其他听起来像它可能做我想要的事情。
答案 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帮助了我。