我收到错误 HTTP状态403 - 无效的CSRF令牌' null'在请求参数' _csrf'上找到或标题' X-CSRF-TOKEN' 当我点击登录按钮时。 HTML文件如下。任何帮助将不胜感激。
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Login page</title>
<style>
.error {
color: red;
}
</style>
</head>
<body>
<h1>Login page</h1>
<p>
<c:if test="${error == true}">
<b class="error">Invalid login or password.</b>
</c:if>
</p>
<form method="post" action="<c:url value='j_spring_security_check'/>" >
<table>
<tbody>
<tr>
<td>Login:</td>
<td><input type="text" name="j_username" id="j_username"size="30" maxlength="40" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="j_password" id="j_password" size="30" maxlength="32" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Login" /></td>
</tr>
</tbody>
</table>
</form>
<p>
<a href="${pageContext.request.contextPath}/index.html">Home page</a><br/>
</p>
</body>
</html>
答案 0 :(得分:5)
您正在使用Spring安全性并发布用户名和密码,但在发布表单时忘记包含_csrf
令牌。
对于Spring安全文档:
13.4.3包括CSRF令牌
表格提交
最后一步是确保在所有中包含CSRF令牌 PATCH,POST,PUT和DELETE方法。这可以使用_csrf完成 请求属性以获取当前的CsrfToken。这样做的一个例子 这有一个JSP如下所示:
<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}"method="post">
<input type="submit" value="Log out" />
<input type="hidden" name="${_csrf.parameterName}"value="${_csrf.token}"/>
</form>
查看完整文档here