如果我允许给定端点上的所有请求都是全局的,如何禁用在方法级别设置的@preauthorize注解?

tjrkku2a  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(210)

我有以下安全配置:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {

    // @formatter:off
    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http.headers().frameOptions().disable()
            .and()
        .csrf().disable()
        .authorizeRequests()
            .antMatchers("/api/test/**").authenticated()
            .antMatchers("/**").permitAll()
        .and()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

该控制器:

@RestController
public class MyController {

    @GetMapping("")
    @PreAuthorize("hasRole('ROLE_USER')")
    public String hello() {
        return "Hello world!";
    }

    @GetMapping("/api/test")
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public String helloTest(Principal principal) {
        System.out.println(principal.toString());
        return "Hello test world!";
    }
}

两种控制器方法都有一个 @PreAuthorize 注解。在安全配置中,我需要 /api/test/** 端点应该是安全的,而其余端点应该是匿名的。
然而,当我测试给定的控制器时,打开 http://localhost:8080 我明白了 401 Unauthorized 因为 @PreAuthorize("hasRole('ROLE_USER')") 注解,而我希望它不安全( .antMatchers("/**").permitAll() ).
tl:dr-我希望“全局”配置覆盖 @PreAuthorize() 注解。
为什么?因为我想设定 .antMatchers("/api/test/**").authenticated() 离别 application.properties 因此,如果我将值更改为“/api/test/hello/**”,那么我希望 helloTest 方法对匿名用户可用,而无需检查所有控制器并删除 @PreAuthorize() 到处都有注解,希望我能找到。提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题