繁体   English   中英

用于检索 csrf 令牌的内置方法

[英]built in method for retrieving csrf token

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

包含令牌是 http 响应头

或者

手动创建一个 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 功能都已经编码/内置(由 spring)。 我觉得我错过了什么。

spring-security-web模块允许通过引用$_csrf参数在视图中访问 CSRF 令牌。 按照6.4.3。 包括 CSRF 令牌文档,这可以作为表单提交的一部分完成:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM