Spring Boot CSRF Filter在后端实现,前端发送CSRF头但引发了http 403错误

时间:2016-03-31 20:20:52

标签: angularjs spring spring-security csrf http-status-code-403

我在后端和前端应用程序中实现了csrf过滤器,我可以看到XSRF-TOKEN被发送,但我仍然得到http 403错误。

Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'XSRF-TOKEN'.

我在后端和前端应用中将相同的标题名称设置为 XSRF-TOKEN 。 你可以在下面看到webconfig。

    @Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .httpBasic()
  .and()
    .authorizeRequests()
      .antMatchers("/", "/index.html").permitAll()
      .antMatchers("/login").permitAll()
      .antMatchers("/favicon.ico").permitAll()
      .antMatchers("/*.html").permitAll()
      .antMatchers("/css/*.css").permitAll()
      .antMatchers("/js/*.js").permitAll()
      .antMatchers("/currency_service/currencies").permitAll()
      .antMatchers("/currency_service/currency").permitAll()
      .antMatchers("/pages/*.html").permitAll()
    .anyRequest().authenticated()
      .and()
    .logout()
    .permitAll()
      .and()
      .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
      .csrf().csrfTokenRepository(csrfTokenRepository());
}

    @Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth
        .inMemoryAuthentication()
            .withUser("username").password("password").roles("USER");
}

private CsrfTokenRepository csrfTokenRepository() {
      HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
      repository.setHeaderName("XSRF-TOKEN");
      repository.setSessionAttributeName("_csrf");
      return repository;
    }

当我在浏览器中检查请求cookie时,我可以看到 XSRF-TOKEN 被发送到后端。 这个问题可能是什么原因?

提前谢谢你。

0 个答案:

没有答案