我在springboot项目中有一个react应用程序,react应用程序使用rest调用获取/设置东西。实际上,我已在配置适配器.csrf().disable()
中禁用了csrf,但我想对此进行管理。
如何在React和SpringBoot之间处理CSRF令牌?
我认为我应该通过axios调用传递令牌,但是如何获得令牌?
谢谢
答案 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'
},