首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中可以交替使用hasAnyRole()和@RolesAllowed吗?

在Spring中可以交替使用hasAnyRole()和@RolesAllowed吗?
EN

Stack Overflow用户
提问于 2022-10-05 17:11:09
回答 1查看 99关注 0票数 0

在同一个Controller类下,我有两个方法--一个用于公共端点,另一个用于授权用户。

代码语言:javascript
复制
public class Controller {

    @GetMapping("/endpoint")
    public ResponseEntity public() {...}

    @GetMapping("/internal/endpoint")
    public ResponseEntity internal() {...}

}

在安全配置中,我有:

代码语言:javascript
复制
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添加到每个内部方法,但我也愿意遵循最佳实践。

EN

回答 1

Stack Overflow用户

发布于 2022-10-05 20:33:32

由于我使用的是.hasAnyRole("ROLE_A", "ROLE_B")而不是.hasAnyAuthority("ROLE_A", "ROLE_B"),所以它不起作用。我不得不用.hasAnyRole("A", "B")来让它开始工作。ROLE_前缀自动添加到值中。所以我的工作配置是

代码语言:javascript
复制
http
    .csrf().disable()
    .sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
    .authorizeRequests()
        .antMatchers("/internal/**").hasAnyRole("A", "B")
        .antMatchers("/**").permitAll()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73963990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档