【问题标题】:Denied access when using Spring Security RoleHierarchy使用 Spring Security RoleHierarchy 时拒绝访问
【发布时间】:2015-09-15 22:45:09
【问题描述】:

我正在我的 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 用户的令牌调用 PREFIX + "/auth/tokens/** WS,一切正常,但如果我为 ADMIN 用户使用令牌,我会收到 403 access denied 响应,但我希望应该允许 ADMIN 使用该服务,因为他在角色层次结构中较高。

我做错了什么?

谢谢

【问题讨论】:

    标签: java spring spring-security roles


    【解决方案1】:

    解决了。错误在数据库中:角色被错误地安排给用户

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 2015-11-13
      • 2016-09-29
      • 2014-06-03
      • 2020-12-19
      • 2014-09-25
      • 2013-10-31
      • 2020-01-25
      相关资源
      最近更新 更多