React + Springboot CSRF

时间:2019-01-24 11:12:44

标签: reactjs spring-boot thymeleaf csrf

我在springboot项目中有一个react应用程序,react应用程序使用rest调用获取/设置东西。实际上,我已在配置适配器.csrf().disable()中禁用了csrf,但我想对此进行管理。 如何在React和SpringBoot之间处理CSRF令牌?

我认为我应该通过axios调用传递令牌,但是如何获得令牌?

谢谢

2 个答案:

答案 0 :(得分:2)

上面的答案我认为它使用了旧的spring安全版本。有一个简单的方法。对于springboot后端,您可以做

.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())

在反应中,您可以按照该答案进行操作,但不要忘记使用<CookiesProvider>来包装返回的内容

或者您也可以从document.cookie中获取令牌。应该有一对以XSRF-TOKEN =

开头的对

并且csrf不应应用于GET方法。

答案 1 :(得分:0)

您需要将CSRF-TOKEN保存到cookie并与请求标头一起发送回去。

SecurityConfig类。

启用csrftokenrepsitory

         .csrf().csrfTokenRepository(csrfTokenRepository()).and().addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class).addFilterAfter(new XSSFilter(), CsrfFilter.class);

添加csrfTokenRepository

       private CsrfTokenRepository csrfTokenRepository() {
    HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
    repository.setHeaderName(X_CSRF_TOKEN);
    return repository;
}

在反应中,您可以从cookie中访问令牌。

    csrfToken=  cookies.get('XSRF-TOKEN');

按如下所示在标题中发送。

     headers: {
    'X-XSRF-TOKEN': this.csrfToken,
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },

https://github.com/supun/okta-spring-boot-react-crud-example/blob/master/src/main/java/com/okta/developer/jugtours/config/SecurityConfiguration.java