Java Spring安全性:检查用户是否具有分层角色的方法

Java Spring安全性:检查用户是否具有分层角色的方法,java,spring-security,role,hierarchical,Java,Spring Security,Role,Hierarchical,如何在运行时检查用户是否具有分层角色? 我知道这个url授权的解决方案@PreAuthorize(“hasRole('ROLE\u ADMIN')”) 但是在一个方法里面如果我要检查角色 例如: 角色\管理员>角色\用户>角色\来宾 if (user.hasRole('ROLE_USER')){ do something; } 在本例中,如果用户具有角色_ADMIN,则条件必须为true,因为在分层角色中,角色_ADMIN>角色_user 谢谢大家的回复。 也许我找到了解决办法。 我使

如何在运行时检查用户是否具有分层角色? 我知道这个url授权的解决方案
@PreAuthorize(“hasRole('ROLE\u ADMIN')”)
但是在一个方法里面如果我要检查角色

例如:

角色\管理员>角色\用户>角色\来宾

if (user.hasRole('ROLE_USER')){
    do something;
}
在本例中,如果用户具有角色_ADMIN,则条件必须为true,因为在分层角色中,角色_ADMIN>角色_user


谢谢大家的回复。 也许我找到了解决办法。 我使用此@Configuration创建了一个自定义分层角色系统:

    @Bean
    public RoleHierarchy roleHierarchy(){
        RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
        roleHierarchy.setHierarchy("ROLE_SUPERADMIN > ROLE_ADMIN ROLE_ADMIN > ROLE_USER ROLE_USER > ROLE_GUEST");
        return roleHierarchy;
    }

    @Bean
    public RoleHierarchyVoter roleVoter() {     
        return new RoleHierarchyVoter(roleHierarchy());
    }

    @Bean 
    public DefaultWebSecurityExpressionHandler expressionHandler(){
        DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
        expressionHandler.setRoleHierarchy(roleHierarchy());
        return expressionHandler;
    }
之后,我创建了一个帮助功能:

public static boolean hasHierarchyRole(String role, RoleHierarchy roleHierarchy) {

        Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities();

        Collection<? extends GrantedAuthority> hierarchyAuthorities = roleHierarchy.getReachableGrantedAuthorities(authorities);

        for (GrantedAuthority authority : hierarchyAuthorities) {
            if (authority.getAuthority().equals(role)) {
                return true;
            }
        }

        return false;
    }
public静态布尔hasHierarchyRole(字符串角色,角色层级角色层级){

CollectionI不想写这段代码:if(user.hasRole('ROLE_user')| | user.hasRole('ROLE_ADMIN')){do something},但只有当(user.hasRole('ROLE_user')),只有最低的角色你不必写,如果你的用户有ROLE_ADMIN和ROLE_users,为什么你需要在一个方法中进行检查?为什么不使用
@PreAuthorize
(您似乎认为这与基于URL的安全性无关)。