我正在使用Spring Boot 2.1.1。我想 CSRF保护默认是启用的 的版本(如果我说错了,请纠正我)。我正试图为我的java web应用程序设置CSRF保护,但我不太确定我需要做哪些更改才能让CSRF令牌显示出来。
我试图通过浏览器检查CSRF令牌。然而,似乎令牌的名称和值都显示为空白。
我的jsp代码。
<table>
<c:forEach items="${model.containerObjects}" var="file">
<tr>
<form action="/path/container?fileName=${file.getName()}" method="post" id="${file.getName()}">
<input form="${file.getName()}" type="hidden" value="${file.getName()}" />
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<td><a href="javascript:{}" onclick="document.getElementById('${file.getName()}').submit()">${file.getName()}</a></td>
<td>${file.getContentLength()}</td>
<td>${file.getLastModified()}</td>
</form>
</tr>
</c:forEach>
</table>
然而,CSRF标记应该在前端的那一行看起来是这样的:
<input type="hidden" name="" value="">
我还确保这个端点对应的后端方法被注解为@POST。还有什么是我遗漏的吗?
我们通过在 意见 的问题,OP没有添加必要的spring-security依赖,这是CSRF保护所需要的(因为它是Spring Security的一个功能)。
如果你想在html源代码中看到它,你应该手动添加它。就像这样。
<meta name="_csrf" th:content="${_csrf.token}"/>