我知道有这个问题的主题,但我做的配置是正确的,我将它与一个正常工作的项目进行了比较。 我想为JWT安全性“取消保护”/登录端点,但仍然在到达/ login端点之前运行AuthenticationFilter。 我很困惑为什么它不起作用。
我的代码如下:
@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();
}
答案 0 :(得分:0)
重复:How to add a filter only for one special path WebSecurityConfigurerAdapter
您无法使用单个Configuration类执行此操作。看一下这个问题:How to apply spring security filter only on secured endpoints?。
在这种情况下,我认为更好的解决方案是配置多个HttpSecurity。来自Spring IO documentation:
我们可以像我们一样配置多个HttpSecurity实例 多个块。关键是扩展 WebSecurityConfigurationAdapter多次。例如, 以下是对URL进行不同配置的示例 以/ api /.
开头
文档中有一个完整的示例,其中包含完成此任务的必要步骤:
祝你好运!
- 正常配置身份验证
- 创建包含的WebSecurityConfigurerAdapter实例 @Order指定应该是哪个WebSecurityConfigurerAdapter 首先考虑。
- http.antMatcher说明了这个HttpSecurity 仅适用于以/ api /
开头的网址- 创建WebSecurityConfigurerAdapter的另一个实例。如果URL不以/ api /开头,则将使用此配置。这个 在ApiWebSecurityConfigurationAdapter之后考虑配置 因为它在1之后有一个@Order值(没有@Order默认为最后一次)。
醇>