在同一个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添加到每个内部方法,但我也愿意遵循最佳实践。
发布于 2022-10-05 20:33:32
由于我使用的是.hasAnyRole("ROLE_A", "ROLE_B")而不是.hasAnyAuthority("ROLE_A", "ROLE_B"),所以它不起作用。我不得不用.hasAnyRole("A", "B")来让它开始工作。ROLE_前缀自动添加到值中。所以我的工作配置是
http
.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/internal/**").hasAnyRole("A", "B")
.antMatchers("/**").permitAll()https://stackoverflow.com/questions/73963990
复制相似问题