spring-security Spring安全antMatchers许可证全部无效

c86crjj0  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(269)

我知道有一些关于这个问题的主题,但是我做的配置是正确的,并且我将它与一个它正常工作的项目进行了比较。我想为JWT安全性“取消”/login端点的安全性,但是AuthenticationFilter仍然在到达/login端点之前运行。我很困惑为什么它不工作。

下面是我的代码:

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .csrf().disable()

                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()

                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()

                .authorizeRequests()

                .antMatchers("/login").permitAll()
                .anyRequest().authenticated();

        http
                .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);

        http.headers().cacheControl();

    }
sycxhyv7

sycxhyv71#

重复:如何仅为一个特殊路径WebSecurityConfigurerAdapter添加过滤器

你不能用一个Configuration类来完成这个任务。How to apply spring security filter only on secured endpoints?
在这种情况下,我认为更好的解决方案是配置多个HttpSecurity。
我们可以配置多个HttpSecurity示例,就像我们可以有多个块一样。关键是要多次扩展WebSecurityConfigurationAdapter。例如,下面是一个为以/api/开头的URL配置不同配置的示例。
文档中有一个完整的示例,其中包含完成此操作所需的步骤:
1.将身份验证配置为正常
1.创建一个包含@Order的WebSecurityConfigurerAdapter示例,以指定应首先考虑哪个WebSecurityConfigurerAdapter。

  1. antMatcher声明此HttpSecurity只适用于以/api/开头的URL
    1.创建WebSecurityConfigurerAdapter的另一个示例。如果URL不是以/api/开头,则将使用此配置。此配置将在ApiWebSecurityConfigurationAdapter之后考虑,因为它的@Order值在1之后(没有@Order默认为最后一个)。
    祝你好运!

相关问题