此问题在此处已有答案:
Multiple antMatchers in Spring security(1个答案)
How to fix role in Spring Security?(2个答案)
上个月关门了。
我在同一个Controller类下有两个方法-一个用于公共端点,另一个用于授权用户。
public class Controller {
@GetMapping("/endpoint")
public ResponseEntity public() {...}
@GetMapping("/internal/endpoint")
public ResponseEntity internal() {...}
}
在“安全配置”中,我有:
http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/**").permitAll()
.antMatchers("/internal/**").authenticated()
如果我将@RolesAllowed({"ROLE_A", "ROLE_B"})
添加到internal()
方法中,我会得到一个403,表示不允许的角色。但是如果我删除它并将.antMatchers("/internal/**").hasAnyRole("ROLE_A", "ROLE_B")
添加到安全配置中,它将允许具有未授权角色的用户访问内部端点。
我的问题是-我可以互换使用它们吗?如果可以,我遗漏了什么?因为我有相当多的内部端点,所以我更喜欢在安全配置中进行角色检查,而不是向每个内部方法添加@RolesAllowed
,但我也愿意遵循最佳实践。
1条答案
按热度按时间plicqrtu1#
因为我使用的是
.hasAnyRole("ROLE_A", "ROLE_B")
而不是.hasAnyAuthority("ROLE_A", "ROLE_B")
,所以它不能工作。我必须使用.hasAnyRole("A", "B")
来使它工作。ROLE_
前缀会自动添加到值中。所以我的工作配置是