Spring Security 6.x已不建议使用AccessDecisionVoter

ftf50wuq  于 2022-12-12  发布在  Spring
关注(0)|答案(1)|浏览(284)

在Sping Boot 2.7.x中,我使用了RoleHierarchyVoter

在Sping Boot 3.x中,不赞成使用AccessDecisionVoter-建议使用AuthorizationManager。是否可以使用AuthorizationManager-Implementation来设置角色层次结构?

@Bean
AccessDecisionVoter hierarchyVoter() {
    RoleHierarchy hierarchy = new RoleHierarchyImpl();
    hierarchy.setHierarchy("ROLE_ADMIN > ROLE_STAFF > ROLE_USER" +
            "ROLE_USER > ROLE_GUEST");
    return new RoleHierarchyVoter(hierarchy);
}

没有工作,因为我使用的AuthorizationFilter

zkure5ic

zkure5ic1#

只需公开一个expressionHandler bean就可以了。
如果使用方法安全性(@EnableMethodSecurity):

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

@Bean
public DefaultMethodSecurityExpressionHandler expressionHandler() {
    DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
    expressionHandler.setRoleHierarchy(roleHierarchy());
    return expressionHandler;
}

如果使用Web安全性(@EnableWebSecurity):

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

@Bean
public DefaultWebSecurityExpressionHandler expressionHandler() {
    DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
    expressionHandler.setRoleHierarchy(roleHierarchy());
    return expressionHandler;
}

相关问题