我在我的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使用该服务,因为他在角色层次结构中更高。
我做错了什么?
谢谢
答案 0 :(得分:0)
解决。错误发生在数据库中:角色错误地安排给用户