如何使用 Spring Boot 启用 CSRF 令牌

How to enable CSRF token with Spring Boot

我正在使用 Spring Boot 2.1.1。我认为 CSRF protection is enabled by default 这个版本的 Spring Boot(如果我错了请纠正我)。我正在尝试为我的 java 网络应用程序设置 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 注释。还有什么我想念的吗?

如果您想在 html 源代码中看到它,您应该手动添加它。像这样:

<meta name="_csrf" th:content="${_csrf.token}"/>

正如我们通过问题 中的对话发现的那样,OP 没有添加必要的 spring-security 依赖项,这是 CSRF 保护所必需的(因为它是Spring 安全的一项功能)。