Spring CSRF:Ajax 即使在设置请求后也出现 403 错误 headers

Spring CSRF: Ajax giving 403 error even after setting request headers

我已经使用 Spring Security 4.0 设置了 CSRF 身份验证。使用 AJAX 时,我每次都会收到 403 错误。我已经设置了请求 headers.

元标记:

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head>
<meta name="_csrf" th:content="${_csrf.token}"/>
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>

AJAX 看起来像这样:

var token = $("meta[name='_csrf']").attr("th:content");
var header = $("meta[name='_csrf_header']").attr("th:content");



$.ajax({
type : "POST",
url : "/PRIT/Home/PopulateVisits",
async: false,
beforeSend: function(xhr) {
   if (header && token) {
      xhr.setRequestHeader(header, token);
   }
},
.
.
.

我可以在 ajax 请求中看到请求 headers :

> Accept:*/* Accept-Encoding:gzip, deflate, br
> Accept-Language:en-US,en;q=0.9 Cache-Control:no-cache
> Connection:keep-alive Content-Length:9
> Content-Type:application/x-www-form-urlencoded; charset=UTF-8
> Cookie:JSESSIONID=C3CAAD64269BD0B96FF35B87053B5899 Host:localhost:8082
> Origin:http://localhost:8082 Pragma:no-cache
> Referer:http://localhost:8082/PRIT/Login User-Agent:Mozilla/5.0
> (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
> Chrome/63.0.3239.132 Safari/537.36
> X-CSRF-TOKEN:23c07d26-0494-4588-a158-624791258762
> X-Requested-With:XMLHttpRequest


Request URL:http://localhost:8082/PRIT/Home/PopulateVisits
Request Method:POST
Status Code:403 
Remote Address:[::1]:8082
Referrer Policy:no-referrer-when-downgrade

我不确定出了什么问题。永远不会访问请求的控制器。控制器是这样的:

@RequestMapping(value = "/Home/PopulateVisits", method = RequestMethod.POST)
    public @ResponseBody List<DataCollectionForm> PopulateVisits(DataCollectionForm dataCollectionForm, HttpServletRequest request) {

我 运行 遇到了类似的问题,在我的情况下,我在登录期间使 spring 会话无效。在您尝试访问请求之前,请确保您没有使控制器中任何位置的 Spring 会话无效。 Spring 将令牌与会话相关联,使它无效将产生一个新令牌。