网络安全配置程序适配器为重叠颁发机构配置



我已经实现了UserDetailsService,为我的Spring Boot REST服务返回带有SimpleGrantedAuthorityUserDetails实例。我有 3 个价格页面,两个授予对特定端点的访问权限,第三个授予对所有端点的访问权限。

我已经按如下方式配置了我的WebSecurityConfig。这两个特定权限有效 - 只有它们可用于访问这些终结点。但是,应授予客户端访问所有终结点的权限的第三个权限将返回 403 禁止访问。

protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.httpBasic().and()
.authorizeRequests().antMatchers(“/**/foo/**”).hasAuthority(“foo”).and()
.authorizeRequests().antMatchers(“/**/moo/**”).hasAuthority(“moo”).and()
.authorizeRequests().antMatchers(“/**/**”).hasAuthority(“admin”)
}

我尝试重新排序定义并尝试anyRequest但它们不起作用。

HttpSecurity#authorizeRequests()javadoc 说:

请注意,匹配器是按顺序考虑的。因此,以下内容无效,因为第一个匹配器匹配每个请求,并且永远不会到达第二个映射:

http.authorizeRequests().antMatchers("/**").hasRole("USER").antMatchers("/admin/**")
.hasRole("ADMIN")

也许你想要:

protected void configure(final HttpSecurity http) throws Exception {
http.csrf().disable()
.httpBasic().and()
.authorizeRequests().antMatchers("/**/foo/**").hasAnyAuthority("admin", "foo").and()
.authorizeRequests().antMatchers("/**/moo/**").hasAnyAuthority("admin", "moo").and()
.authorizeRequests().antMatchers("/**").hasAuthority("admin");
}

或者,设置RoleHierarchy

protected void configure(final HttpSecurity http) throws Exception {
http.csrf().disable()
.httpBasic().and()
.authorizeRequests().antMatchers("/**/foo/**").hasAuthority("foo").and()
.authorizeRequests().antMatchers("/**/moo/**").hasAuthority("moo").and()
.authorizeRequests().antMatchers("/**").hasAuthority("admin");
}
@Bean
RoleHierarchyVoter roleVoter(final RoleHierarchy roleHierarchy) {
return new RoleHierarchyVoter(roleHierarchy);
}
@Bean
public RoleHierarchy roleHierarchy() {
final Map<String, List<String>> hierarchyMap = new HashMap<>();
hierarchyMap.put("admin", List.of("foo", "moo"));
final String roleHierarchy = RoleHierarchyUtils.roleHierarchyFromMap(hierarchyMap);
final RoleHierarchyImpl ret = new RoleHierarchyImpl();
ret.setHierarchy(roleHierarchy);
return ret;
}

相关内容

  • 没有找到相关文章

最新更新