反应 + springboot csrf
React + springboot csrf
我在 springboot 项目中有一个反应应用程序,反应应用程序使用 rest 调用 get/set 东西。实际上,我已经在配置适配器 .csrf().disable()
中禁用了 csrf,但我想解决这个问题。
我如何处理 react 和 springboot 之间的 csrf 令牌?
我认为我应该通过我的 axios 调用传递令牌,但我是如何得到它的?
谢谢
您需要将 CSRF-TOKEN
保存到 cookie 中并随请求一起发回 header。
安全配置class。
启用 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 中访问令牌。
csrfToken= cookies.get('XSRF-TOKEN');
在header.
发送如下
headers: {
'X-XSRF-TOKEN': this.csrfToken,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
上面的答案我认为它使用了旧的 spring 安全版本。有一个简单的方法。对于 springboot 后端,你可以做
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
对于反应,你可以按照那个答案做,但不要忘记使用 <CookiesProvider>
来总结你 return
或者您可以直接从 document.cookie 获取令牌。应该有一对以 XSRF-TOKEN=
开头的
并且 csrf 不应应用于 GET 方法。
我在 springboot 项目中有一个反应应用程序,反应应用程序使用 rest 调用 get/set 东西。实际上,我已经在配置适配器 .csrf().disable()
中禁用了 csrf,但我想解决这个问题。
我如何处理 react 和 springboot 之间的 csrf 令牌?
我认为我应该通过我的 axios 调用传递令牌,但我是如何得到它的?
谢谢
您需要将 CSRF-TOKEN
保存到 cookie 中并随请求一起发回 header。
安全配置class。
启用 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 中访问令牌。
csrfToken= cookies.get('XSRF-TOKEN');
在header.
发送如下 headers: {
'X-XSRF-TOKEN': this.csrfToken,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
上面的答案我认为它使用了旧的 spring 安全版本。有一个简单的方法。对于 springboot 后端,你可以做
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
对于反应,你可以按照那个答案做,但不要忘记使用 <CookiesProvider>
来总结你 return
或者您可以直接从 document.cookie 获取令牌。应该有一对以 XSRF-TOKEN=
开头的并且 csrf 不应应用于 GET 方法。