如何从spring security 3.1获取当前用户角色

时间:2012-04-10 16:43:52

标签: spring spring-security

我已从数据库中为当前用户加载了角色。我可以在jsp中使用spring security表达式访问用户角色,并且可以隐藏未经hasRole授权的选项和URL。现在我想将它放在servlet中并将其显示在日志中。(或存储在用户对象会话中)。我们怎样才能实现呢?

6 个答案:

答案 0 :(得分:60)

您可以尝试这样的事情:

Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>)    SecurityContextHolder.getContext().getAuthentication().getAuthorities();

您在权限变量中拥有角色集合。

更新:修复了GrantedAuthority泛型的错误

答案 1 :(得分:18)

如果您使用Java 8开发,它会变得更容易。

获取所有用户角色:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

Set<String> roles = authentication.getAuthorities().stream()
     .map(r -> r.getAuthority()).collect(Collectors.toSet());

检查用户是否具有特定角色,例如 ROLE_USER

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

boolean hasUserRole = authentication.getAuthorities().stream()
          .anyMatch(r -> r.getAuthority().equals("ROLE_USER"));

答案 2 :(得分:8)

您是否曾尝试从HttpServletRequest中调用getUserPrincipal()

答案 3 :(得分:2)

完成两个答案......

以下是Spring的{​​{1}}安全实施,因此您可以看到getUserPrincipal实际上我们getUserPrincipal

SecurityContextHolder

答案 4 :(得分:1)

如果为我的项目创建了自定义hasRole函数。

public static boolean hasRole (String roleName)
{
    return SecurityContextHolder.getContext().getAuthentication().getAuthorities().stream()
            .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(roleName));
}

答案 5 :(得分:0)

def springSecurityService

def roles = springSecurityService.getAuthentication()。getAuthorities()