【发布时间】: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