使用Spring Security RoleHierarchy时拒绝访问

时间:2015-06-29 12:51:04

标签: java spring spring-security roles

我在我的Web应用程序中配置对REST WS的角色访问,我想实现一个角色Hierarchy。 我定义了这个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使用该服务,因为他在角色层次结构中更高。

我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:0)

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