java - 使用 Spring Security RoleHierarchy 时拒绝访问

标签 java spring spring-security roles

我正在 Web 应用程序中配置对 REST WS 的角色访问,并且我想实现角色层次结构。 我定义了这个bean

@Bean
public RoleHierarchyImpl roleHierarchy() {
    RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
    roleHierarchy.setHierarchy(
        UserManagement.RoleEnum.ADMIN.getRoleString() + " > " + UserManagement.RoleEnum.WEBUI.getRoleString()
    );


    return roleHierarchy;
}

private SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
    DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
    defaultWebSecurityExpressionHandler.setRoleHierarchy(roleHierarchy());
    return defaultWebSecurityExpressionHandler;
}

然后在我的 SecurityConfiguration.configure(HttpSecurity http) 方法中编写:

String[] URLsToBeProtectedAsWebUi = {PREFIX + "/auth/tokens/**"}; 

http
    .csrf().disable()
    .exceptionHandling().authenticationEntryPoint(authenticationExceptionEntryPoint())
    .and()
    .authorizeRequests()
        .expressionHandler(webExpressionHandler())
        .antMatcher(PREFIX + "/**")
            .authorizeRequests()
                .antMatchers(URLsToBeProtectedAsWebUi).hasRole(UserManagement.RoleEnum.WEBUI.getRoleString())
    .and()
    .addFilterBefore(authenticationTokenProcessingFilter(), BasicAuthenticationFilter.class)
    .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

问题是,如果我使用 WEB UI 用户的 token 来调用 PREFIX + "/auth/tokens/** WS,则一切正常,但如果我使用 ADMIN 用户的 token ,则会收到 403 访问被拒绝 响应,但我希望 ADMIN 应该被允许使用该服务,因为他在角色层次结构中处于较高位置。

我做错了什么?

谢谢

最佳答案

已解决。错误出现在数据库中:角色被错误地分配给用户

关于java - 使用 Spring Security RoleHierarchy 时拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116216/

相关文章:

java - 为基于Wildfly容器的身份验证生成加盐/散列密码

java - SQLException(无效的列索引) - 页面中没有显示结果

java - 向 jframe 添加更多容器

java - 使用 Spring 注入(inject)模板化集

java - 有条件地将数据发送到 Spring Batch 中的多个写入器

java - Spring Security - 本地化消息

java - Spring 安全: How to validate password length

Java 任务控制 - 在 session 之间保存自定义图表

java - 如何通过 Jenkins 运行 jar 文件?

spring - 如何在 Spring webflux 应用程序中将 Spring WebSessionIdResolver 与 Spring Security 5 结合使用?