内置的检索csrf令牌的方法

问题描述 投票:1回答:1

我在Spring Security 3.2.9.RELEASE中启用了csrf。我在网上找到了获取csrf令牌的这些选项:

include token is http response headers

要么

手动创建一个GET api来检索它

@RequestMapping(method = RequestMethod.GET, value = "/csrf")
    public @ResponseBody String retrieveCsrfToken(HttpServletRequest request) throws Exception {
        if (null != request.getSession(false)) {
            System.out.println("session exist ");
        }
        CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
        return token.getToken();
    }

是否没有内置机制来检索它? 获取令牌的预期默认方式是什么?

所有其他csrf功能已经编码/内置(按弹簧),除了这一个如何获取令牌。我觉得我错过了什么。

java spring-security csrf
1个回答
1
投票

spring-security-web模块允许通过引用$_csrf参数来访问视图中的CSRF令牌。根据6.4.3. Include the CSRF Token docs,这可以作为表单提交的一部分来完成:

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

或存储在<meta>标签中:

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

通过JavaScript进一步阅读:

$(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);
  });
});
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.