Grails:如何获取当前登录用户的用户名,这需要啥导入?

Posted

技术标签:

【中文标题】Grails:如何获取当前登录用户的用户名,这需要啥导入?【英文标题】:Grails: How to get username of currently logged in user, and what imports does that require?Grails:如何获取当前登录用户的用户名,这需要什么导入? 【发布时间】:2015-08-16 11:42:47 【问题描述】:

我只需要当前登录用户的名称。与<sec:username/> 在 gsp 中显示的相同。我不知道该怎么做。 这是以前的答案和问题 - 它们似乎都需要一些导入,但没有一个解决方案适合我:

Grails Spring Security (get current user) How to get id of the current user logged in grails? How to get current_user by using Spring Security Grails plugin in GSP Grails and Spring Security: How do I get the authenticated user from within a controller?

具体来说,我想访问控制器内部的用户名并将其放入域实例的变量中,以便将其(连同其他信息)持久保存到数据库中以进行日志记录。在该控制器内部,没有任何东西可以看到,即使是远程引用 Person/User 类、spring security 或任何其他听起来可能符合我意图的东西。

【问题讨论】:

【参考方案1】:

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

def springSecurityService

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

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

【讨论】:

currentUser 是一种获取用户名的昂贵方式,因为它会从数据库加载 User 实例。 authentication.principal.username 是轻量级的,因为它已经缓存在内存中【参考方案2】:

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

【讨论】:

如果没有人登录,该命令将失败,我现在还预先检查,使用:if (springSecurityService.isLoggedIn()) - 所以总代码是:String currentUser = "" if (springSecurityService.isLoggedIn()) currentUser = springSecurityService.authentication.principal.getUsername() 也很实用 - 如果没有人登录,springSecurityService.authentication.getPrincipal() 返回字符串 anonymousUser - for more details, see the comment on SpringSecurityService.groovy lines 54 to 56, just before getPrincipal()

以上是关于Grails:如何获取当前登录用户的用户名,这需要啥导入?的主要内容,如果未能解决你的问题,请参考以下文章

grails - 全局获取当前用户

如何在 Grails 中使用 Spring Security 检查用户在线状态?

使用spring security的Grails Facebook登录-如何知道登录的用户名

Grails 2.1.0 / Java 7 从哪里获取 Windows 8.1 上的当前用户名?

Grails springSecurityService如何设置当前用户

java 如何获取当前AD域用户名?