ajax GET请求出现403禁止错误

403 forbidden每当我尝试GET从数据库中获取用户信息时,都会收到-error 消息。关于下面的代码,每当我尝试通过按Ajax测试按钮尝试请求时,它都无法运行并给我发出警报,但是在控制台中也给我一个403 Forbidden-error。我不确定是否与Spring安全性有关?

用户JSP页面:

<table>

<tr>

<td>User Id</td>

<td>Full Name</td>

<td>Username</td>

<td>Email</td>

<td>Date of Birth</td>

<td>User Authority</td>

<td>Update </td>

<td>Delete</td>

</tr>

<c:forEach var="user" items="${users}">

<tr>

<td><c:out value="${user.id}" /></td>

<td><c:out value="${user.name}"/></td>

<td><c:out value="${user.username}"/></td>

<td><c:out value="${user.email}"/></td>

<td><c:out value="${user.dob}"/></td>

<td><c:out value="${user.authority}"/></td>

<td>

<a id="update" href="<c:url value="/viewUser"><c:param name="id" value="${user.id}"/></c:url>"><button>Update</button></a>

</td>

<td>

<a id="delete" href="<c:url value="/deleteUser"><c:param name="id" value="${user.id}"/></c:url>"><button>Delete</button></a>

</td>

<td>

<button class="loadUser" name="id" value="${user.id}">Ajax test</button>

</td>

</tr>

</c:forEach>

</table>

<div id="personIdResponse"> </div>

<script type="text/javascript">

$(document).ready(function(){

$(".loadUser").click(function(e) {

e.preventDefault();

var personId = +$(this).val();

$.get('${pageContext.request.contextPath}/SDP/ajaxTest/' + personId, function(user) {

$('#personIdResponse').text(user.name + ', = username ' + user.username);

})

.fail(function(user){

alert('Could not load user');

});

});

});

</script>

用户控制器类:

    @RequestMapping("/viewUser")

public String updateUser(Model model, @RequestParam(value = "id", required = false) Integer id) {

User user = usersService.getUser(id);

model.addAttribute("user", user);

return "settings";

}

@RequestMapping("/ajaxTest")

@ResponseBody

public User ajaxTest(@RequestParam(value = "id", required = false) Integer id) {

User user = usersService.getUser(id);

return user;

}

回答:

它通常是由Spring默认的CSRF保护引起的。

例如,如果你使用JS代码中的DELETE HTTP请求,则还需要发送CSRF保护标头。

无需禁用CSRF保护!请不要这样做,如果没有必要。

你可以通过以下方式轻松添加CSRF AJAX / REST保护:

1.向每个页面添加元头(使用@ layout.html等):

<head>

<meta name="_csrf" th:content="${_csrf.token}"/>

<meta name="_csrf_header" th:content="${_csrf.headerName}"/>

</head>

2.自定义你的ajax请求以为每个请求发送这些标头:

$(function () {

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

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

$(document).ajaxSend(function(e, xhr, options) {

xhr.setRequestHeader(header, token);

});

});

请注意,我使用百里香叶,所以我使用th:content而不是content属性。

以上是 ajax GET请求出现403禁止错误 的全部内容, 来源链接: utcz.com/qa/429360.html

回到顶部