如何解决带有csrf标头的Spring-Boot Post请求
在开发Spring Boot应用程序时,我禁用了csrf;但现在我需要启用它。我遵循了Spring Docs here,但我不断收到“ SyntaxError:无效的标题名称”。在我的javascript文件中发出POST请求。我在这里做错了什么吗?
此功能位于HTML页面顶部的“我的标题”中
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
这是发出请求的JavaScript文件:
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == XMLHttpRequest.DONE) {
location.reload();
}
}
// Headers for CSRF protection
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
request.open("POST","/admin/delete-email");
request.setRequestHeader(header,token); <-- This line throws syntax error.
request.send(formData);
这是安全配置:
@Override
public void configure(HttpSecurity http) throws Exception {
// The following snippet opens the entire app
// http.authorizeRequests().antMatchers("/**").permitAll();
//http.csrf().disable();
http.authorizeRequests()
.antMatchers("/admin/**")
.hasRole("ADMIN")
.antMatchers("/db/**")
.hasRole("ADMIN")
.and()
.formLogin()
.permitAll()
.and()
.httpBasic();
}
使用表单发出POST请求时,我还会收到403错误:
<form method="POST" enctype="multipart/form-data" action="/admin/add-email">
<td class="tg-0pky"><input type="text" name="employeeId"/></td>
<td class="tg-0pky"><input type="text" name="email"/></td>
<td class="tg-0pky"><input type="submit" value="Upload"/></td>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>
解决方法
弄清楚了。由于我正在使用Thymeleaf,因此需要使用th:名称空间。
<meta th:name="_csrf" th:content="${_csrf.token}"/>
<meta th:name="_csrf_header" th:content="${_csrf.headerName}"/>
和
<form method="POST" enctype="multipart/form-data" action="/admin/add-email">
<td class="tg-0pky"><input type="text" name="employeeId"/></td>
<td class="tg-0pky"><input type="text" name="email"/></td>
<td class="tg-0pky"><input type="submit" value="Upload"/></td>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
</form>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。