用于检索 csrf 令牌的内置方法
built in method for retrieving csrf token
我在 Spring 安全 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 功能已经 coded/built 在(由 spring)中,除了关于如何获取令牌的这一部分。我觉得我错过了什么。
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);
});
});
我在 Spring 安全 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 功能已经 coded/built 在(由 spring)中,除了关于如何获取令牌的这一部分。我觉得我错过了什么。
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);
});
});