Java 如何使用Spring Boot启用CSRF令牌

Java 如何使用Spring Boot启用CSRF令牌,java,spring-boot,jsp,csrf,Java,Spring Boot,Jsp,Csrf,我使用的是SpringBoot2.1.1。我认为这个版本的Spring Boot(如果我错了,请纠正我)。我正在尝试为我的java web应用程序设置CSRF保护,但我不确定需要做哪些更改才能显示CSRF令牌 我正在尝试通过浏览器检查CSRF令牌。但是,令牌的名称和值似乎显示为空白 我的jsp代码: <table> <c:forEach items="${model.containerObjects}" var="file"> <tr>

我使用的是SpringBoot2.1.1。我认为这个版本的Spring Boot(如果我错了,请纠正我)。我正在尝试为我的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>

${file.getContentLength()}
${file.getLastModified()}
但是,CSRF令牌(我假设)应位于前端的行如下所示:

<input type="hidden" name="" value="">


我还确保与此端点对应的后端方法用@POST注释。还有什么我遗漏的吗?

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


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


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

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

也许我有误解(我对这一点没有很好的理解),但是我试着用这一行手动添加它,当我检查html源代码时,这一行显示为空白。我按照这里的指示:@Azianese哦,那是我的错,我还以为你在用thymeleaf呢。从外观上看,您做的一切都是对的,配置中可能有错误,我建议您向控制器发出失眠或邮递员的请求,以查看csrf是否实际打开,这些请求应该有一个403(我认为)没有csrf标记。结果是,我在Pom.xml中缺少了spring安全依赖项。无论如何,感谢您的输入:)也许我有点误解(我对这一点没有很强的理解),但我尝试用这一行手动添加它,当我检查html源代码时,这一行显示为空白。我按照这里的指示:@Azianese哦,那是我的错,我还以为你在用thymeleaf呢。从外观上看,您做的一切都是对的,配置中可能有错误,我建议您向控制器发出失眠或邮递员的请求,以查看csrf是否实际打开,这些请求应该有一个403(我认为)没有csrf标记。结果是,我在Pom.xml中缺少了spring安全依赖项。无论如何,感谢您的输入:)是的,默认情况下应启用csrf。spring安全依赖项在运行时可用吗(您是否将其添加到
pom.xml
或gradle文件中?)?或者可能是您以某种方式禁用了它(例如,通过自定义的
@Configuration
类?)@qutax谢谢,我还没有确认,但这听起来像是个问题(我没有将spring安全依赖项添加到pom.xml中)。@qutax这确实是缺失的部分。再次感谢!很高兴听到这个消息!我把它添加为一个答案:)是的,默认情况下应该启用csrf。spring安全依赖项在运行时可用吗(您是否将其添加到
pom.xml
或gradle文件中?)?或者可能是您以某种方式禁用了它(例如,通过自定义的
@Configuration
类?)@qutax谢谢,我还没有确认,但这听起来像是个问题(我没有将spring安全依赖项添加到pom.xml中)。@qutax这确实是缺失的部分。再次感谢!很高兴听到这个消息!我添加了它作为答案:)