Grails 如何使用spring安全插件获取当前用户角色?
我正在grails应用程序中使用spring安全核心插件。我需要知道当前用户在控制器操作中的角色。我如何检索它?您可以将Grails 如何使用spring安全插件获取当前用户角色?,grails,spring-security,authorization,role,Grails,Spring Security,Authorization,Role,我正在grails应用程序中使用spring安全核心插件。我需要知道当前用户在控制器操作中的角色。我如何检索它?您可以将springSecurityService注入控制器: def springSecurityService 然后在行动中,呼吁: def roles=springSecurityService.getPrincipal().getAuthorities() 查看文档。从控制器可以使用插件添加到元类的两种方法,getPrincipal和isLoggedIn: def myActi
springSecurityService
注入控制器:
def springSecurityService
然后在行动中,呼吁:
def roles=springSecurityService.getPrincipal().getAuthorities()
查看文档。从控制器可以使用插件添加到元类的两种方法,
getPrincipal
和isLoggedIn
:
def myAction = {
if (loggedIn) {
// will be a List of String
def roleNames = principal.authorities*.authority
}
}
如果操作是安全的,则可以跳过
loggedIn
/isLoggedIn()
检查。如果只需要检查用户是否处于特定角色,则使用SpringSecurityUtils.ifallgrated
,它将单个字符串作为包含逗号分隔的角色列表的参数。如果当前用户属于所有用户,则返回trueSpringSecurityUtils
还具有类似于IFAnyGrated
、IFNotGrated
等方法,因此它应该适用于您试图实现的任何功能。您还可以单独使用getAuthenticatedUser()
。此方法自动注入每个控制器中,因此只能从控制器中使用。如果您想从其他任何地方访问当前登录的用户,则必须使用其他方法之一。获取该用户
def springSecurityService
def principal = springSecurityService.principal
String username = principal.username
SecurityContextHolder知道:
SecurityContextHolder.getContext().getAuthentication().getAuthorities()
酷,我没有意识到这些被添加到元类中。在控制器中使用,比如说,
authenticatedUser
比注入springSecurityService
插件有什么缺点吗?看看插件代码,它们看起来基本相同。没有区别,只是更方便。用户特定变量(如roleNames)可以存储为控制器字段吗?我认为在控制器中存储任何状态都不安全,因为它将被共享。我说得对吗?如果是这样,是否有任何技巧可以避免在控制器的所有操作中重复此代码?如果使用以下代码,如何检查role的值是“role\u USER”还是“role\u ADMIN”?(def role in roles){If(role.getAuthority()=“role\u ADMIN”)//do something}