繁体   English   中英

Spring CSRF:即使在设置请求标头之后,Ajax也会产生403错误

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

我已经使用Spring Security 4.0设置了CSRF身份验证。 使用AJAX时,每次都会出现403错误。 我已经设置了请求标头。

元标记:

<!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请求中看到请求标头:

> 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将令牌与会话相关联,使其无效将产生一个新令牌。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM