【问题标题】:Add csrf token and parameterName into logout link将 csrf 令牌和参数名称添加到注销链接
【发布时间】:2014-09-19 14:29:35
【问题描述】:

我在菜单中有链接:

<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}"

【问题讨论】:

    标签: spring jsp spring-security


    【解决方案1】:

    启用 CSRF 后,您只能使用 POST 请求注销。为此,您需要创建一个表单(或使用 AJAX 请求)来提交您的 CSRF 令牌。

    <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();
    

    【讨论】:

    • 你能帮我处理ajax请求吗?我更喜欢ajax方式。
    猜你喜欢
    • 2015-08-25
    • 2012-08-11
    • 2016-02-03
    • 2023-02-20
    • 1970-01-01
    • 2018-10-08
    • 2016-09-19
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多