我在菜单中有链接:
<li><a href="<spring:url value="/logout" />">Logout</a></li>
在我在 spring-security xml 设置中设置 csrf 保护之前,它运行良好:
<http use-expressions="true">
<csrf />
<logout logout-url="/logout" logout-success-url="/success" />
</http>
现在,我遇到了问题,因为注销没有 csrf 并且它不起作用。只需返回未找到代码 404 的页面。如何将这些参数添加到我的注销链接中:
"${_csrf.parameterName}" value="${_csrf.token}"
最佳答案
启用 CSRF 后,您只能使用 POST 请求注销。为此,您需要创建一个表单(或使用 AJAX 请求)来提交您的 CSRF token 。
<form action="/logout" method="post">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<input type="submit" value="Logout" />
</form>
或者您可以发送 AJAX 请求。
function changeHandler() {
// request is done and issues a redirect
if (this.readyState === 4 && this.status === 302) {
location.refresh();
}
}
var r = new XMLHttpRequest();
r.open('POST', '/logout', true);
r.onreadystatechange = changeHandler;
r.setRequestHeader('${_csrf.headerName}', '${_csrf.token}');
r.send();
关于spring - 将 csrf token 和参数名称添加到注销链接中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24994621/