spring - 将 csrf token 和 parameterName 添加到注销链接

标签 spring jsp spring-security

我在菜单中有链接:

<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 和 parameterName 添加到注销链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24994621/

相关文章:

spring - 将 @Query 切换到 nativeQuery 会导致 PropertyReferenceException

java - JMS 消息传递实现

java - 如何在 Spring 框架中使用 ORM...?

java - Spring Cloud Config 无法使用 ssh key 克隆私有(private) bitbucket 存储库

java - 简单的portlet jsp页面流问题

java - 在 Struts 2 中使用 Ajax 和 Oracle 数据库自动完成文本框

java - 如何解决 : Can not find the tag library descriptor for "http://java.sun.com/jsp/jSTL/core"

spring - 考虑在您的配置中定义一个类型为 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' 的 bean

java - Spring Security-如何在 CustomTokenAuthenticationFilter 中指定过滤器处理 url

java - Spring Security 条件基本身份验证