我试图为某些特定的api调用启用csrf过滤器,而其他人则不需要csrf过滤器。我做的是
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().antMatchers("/public/**").permitAll();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.csrf().disable().addFilterBefore(new StatelessCSRFFilter(), CsrfFilter.class).authorizeRequests().antMatchers("/rest/**").permitAll();
}
问题是当我调用localhost时:8080 / public / hello
显示错误
" message":"缺少或不匹配的CSRF令牌"
我正在使用Spring启动和Spring Security。
感谢您的帮助。
答案 0 :(得分:5)
http.antMatcher("/public/**").authorizeRequests().anyRequest().permitAll();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.antMatcher("/rest/**").addFilterBefore(new StatelessCSRFFilter(), CsrfFilter.class).csrf().disable();
或者你可以这样做。我想两者都会有效。
http.antMatcher("/public/**").csrf().disable();
http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint);
http.antMatcher("/rest/**").addFilterBefore(new StatelessCSRFFilter(), CsrfFilter.class).csrf().disable();
答案 1 :(得分:2)
尝试将http.csrf().disable()
更改为http.antMatcher("/public/**").csrf().disable()
和http.antMatcher("/rest/**").csrf().disable()
。你可能不得不将这两行放在他们自己的WebSecurityConfigurerAdapter
中。
这将告诉Spring-Security创建多个HTTP安全过滤器链(类似于XML模型中有多个<http/>
块)。