我在一个springboot项目中有一个react应用程序,react应用程序使用rest调用来获取/设置内容。实际上,我已经在配置适配器.csrf().disable()中禁用了csrf,但我想修改一下。如何在react和springboot之间处理csrf令牌?
我认为我应该通过我的axios调用传递令牌,但是我如何获得它呢?
谢谢
发布于 2019-01-25 17:14:10
您需要将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;
}在react中,您可以从cookie访问token。
csrfToken= cookies.get('XSRF-TOKEN');在标题中按如下方式发送。
headers: {
'X-XSRF-TOKEN': this.csrfToken,
'Accept': 'application/json',
'Content-Type': 'application/json'
},发布于 2019-09-19 23:33:13
上面的答案我认为它使用了一个旧的spring安全版本。有一个简单的方法。对于springboot后端,你可以这样做
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())在react中,您可以按照答案中的方法进行操作,但不要忘记使用<CookiesProvider>来包装您返回的内容
或者,您可以直接从document.cookie获取令牌。应该有一个以XSRF-TOKEN=开头的对
并且不应将csrf应用于GET方法。
https://stackoverflow.com/questions/54345301
复制相似问题