我正在尝试在Spring Boot应用程序中打开HttpOnly的情况下设置csrf支持,并且在Spring CsrfFilter的工作方式上遇到麻烦。
首先,我进行了以下设置:
http
.csrf()
.csrfTokenRepository(new CookieCsrfTokenRepository())
那让我非常接近。在将XSRF-TOKEN Cookie添加到响应的GET请求中,浏览器对其进行设置,然后在以下请求中将其发送。当我执行POST请求或从Spring CsrfFilter传递此行的任何内容时出现问题:
if (!this.requireCsrfProtectionMatcher.matches(request)) {
filterChain.doFilter(request, response);
return;
}
在那之后,它得到的代码如下:
String actualToken = request.getHeader(csrfToken.getHeaderName());
if (actualToken == null) {
actualToken = request.getParameter(csrfToken.getParameterName());
}
if (!csrfToken.getToken().equals(actualToken)) {
csrfToken是从CookieRepository加载的令牌。
这对我来说没有任何意义,因为这显然是试图从标头中获取csrf令牌,或者如果请求参数中没有该令牌。发出请求时,我都无法设置这些内容,因为它是HttpOnly Cookie,因此无法从JavaScript访问它。
作者在这里打算做什么?我找不到任何好的资源来说明应该怎么做。