如何从 RoleHierarchyImpl 获取所有角色

mat*_*juh 2 spring-security

我有一个配置和工作的角色层次结构:

<beans:bean id="roleHierarchy"
    class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
    <beans:property name="hierarchy">
        <beans:value>
            ROLE_ADMIN > ROLE_PRIVILEGED
            ROLE_PRIVILEGED > ROLE_USER
            ROLE_USER > ROLE_ANONYMOUS
        </beans:value>
    </beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)

对于用户角色设置,我需要访问我定义的角色。我怎样才能实现它?可能与roleHierarchy.getReachableGrantedAuthorities但我不知道,给它什么作为参数。提前致谢。

小智 5

据我了解,您希望从给定的授予权限中获取所有可访问的授予权限。如果是这种情况,以下是解决方法:

  • 首先RoleHierarchyImpl从 Spring获取实例ApplicationContext

     ApplicationContext context = new FileSystemXmlApplicationContext(
            "--path--");
     BeanFactory factory = context;
     RoleHierarchyImpl roleHierarchy = (RoleHierarchyImpl) factory.getBean("roleHierarchy");`
    
    Run Code Online (Sandbox Code Playgroud)

或创建一个新实例并加载层次结构,如下所示;

     RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
     roleHierarchy.setHierarchy(properties.getProperty("security.roleHierarchy"));
Run Code Online (Sandbox Code Playgroud)
  • 现在您可以使用roleHierarchy.getReachableGrantedAuthorities和AuthorityUtils获取所有可访问的授予权限:

     Collection<GrantedAuthority> ga = roleHierarchy.getReachableGrantedAuthorities(AuthorityUtils.createAuthorityList(new String[]{"ROLE_ADMIN"}));
    
    Run Code Online (Sandbox Code Playgroud)