我知道有一些关于这个问题的主题,但是我做的配置是正确的,并且我将它与一个它正常工作的项目进行了比较。我想为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();
}
1条答案
按热度按时间sycxhyv71#
重复:如何仅为一个特殊路径WebSecurityConfigurerAdapter添加过滤器
你不能用一个Configuration类来完成这个任务。How to apply spring security filter only on secured endpoints?。
在这种情况下,我认为更好的解决方案是配置多个HttpSecurity。
我们可以配置多个HttpSecurity示例,就像我们可以有多个块一样。关键是要多次扩展WebSecurityConfigurationAdapter。例如,下面是一个为以/api/开头的URL配置不同配置的示例。
文档中有一个完整的示例,其中包含完成此操作所需的步骤:
1.将身份验证配置为正常
1.创建一个包含@Order的WebSecurityConfigurerAdapter示例,以指定应首先考虑哪个WebSecurityConfigurerAdapter。
1.创建WebSecurityConfigurerAdapter的另一个示例。如果URL不是以/api/开头,则将使用此配置。此配置将在ApiWebSecurityConfigurationAdapter之后考虑,因为它的@Order值在1之后(没有@Order默认为最后一个)。
祝你好运!