21

我在我的 grails 应用程序中使用 spring-security-core 插件。我需要知道当前用户在控制器操作中的角色。我怎样才能找回它?

4

6 回答 6

32

您可以注入springSecurityService控制器:

def springSecurityService

然后在你的行动中,调用:

def roles = springSecurityService.getPrincipal().getAuthorities()

请参阅此处的文档。

于 2011-06-24T12:06:06.767 回答
20

从控制器中,您可以使用插件添加到元类的两种方法,getPrincipal以及 isLoggedIn

def myAction = {
   if (loggedIn) {
      // will be a List of String
      def roleNames = principal.authorities*.authority
   }
}

如果操作是安全的,您可以跳过loggedIn/isLoggedIn()检查。

于 2011-06-24T12:19:51.877 回答
4

如果您只需要检查用户是否处于特定角色中,则使用SpringSecurityUtils.ifAllGrantedwhich 将单个字符串作为参数,其中包含以逗号分隔的角色列表。如果当前用户属于所有用户,它将返回 true。 SpringSecurityUtils也有像ifAnyGranted,ifNotGranted等等这样的方法,所以它应该适用于你想要完成的任何事情。

于 2014-02-06T03:24:49.207 回答
0

获取用户

    def springSecurityService
    def principal = springSecurityService.principal
    String username = principal.username
于 2015-11-02T10:07:11.013 回答
0

SecurityContextHolder 知道:

SecurityContextHolder.getContext().getAuthentication().getAuthorities()
于 2016-08-16T10:07:58.217 回答
-1

您也可以单独使用getAuthenticatedUser()。此方法会自动注入到每个控制器中,因此只能从控制器中使用。如果您想从其他任何地方访问当前登录的用户,则必须使用其他方法之一。

于 2014-06-10T05:45:43.070 回答