我正在 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/