如何使用spring安全性插件获取当前用户角色?

时间:2011-06-24 11:34:01

标签: grails spring-security authorization role

我在我的grails应用程序中使用spring-security-core插件。我需要知道当前用户在控制器操作中的角色。我该如何检索?

5 个答案:

答案 0 :(得分:31)

您可以将springSecurityService注入您的控制器:

def springSecurityService

然后在您的操作中,请致电:

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

请参阅文档here

答案 1 :(得分:20)

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

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

如果操作受到保护,您可以跳过loggedIn / isLoggedIn()检查。

答案 2 :(得分:3)

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

答案 3 :(得分:0)

获取用户

    def springSecurityService
    def principal = springSecurityService.principal
    String username = principal.username

答案 4 :(得分:-1)

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