问题描述
如果我们在服务器端使用模板引擎,则可以像这样将CSRF令牌传递给客户端:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
但是,如果我们根本无法使用模板引擎,则应使用如下响应标头将CSRF令牌传递给客户端:
Csrftoken token = (Csrftoken) request.getAttribute("_csrf");
// Spring Security will allow the Token to be included in this header name
response.setHeader("X-CSRF-HEADER",token.getHeaderName());
// Spring Security will allow the token to be included in this parameter name
response.setHeader("X-CSRF-ParaM",token.getParameterName());
// this is the value of the token to be included as either a header or an HTTP parameter
response.setHeader("X-CSRF-TOKEN",token.getToken());
public static final String DEFAULT_CSRF_TOKEN_ATTR_NAME = HttpSessionCsrftokenRepository.class.getName().concat(".CSRF_TOKEN");
Csrftoken sessionToken = (Csrftoken) request.getSession().getAttribute(DEFAULT_CSRF_TOKEN_ATTR_NAME);
后一种方式,服务器应向客户端提供虚拟REST API,因为客户端无法在第一个HTML页面加载之前进行AJAX调用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)