หลังจากกำหนดค่า Spring Security 3.2 แล้ว_csrf.token
จะไม่ถูกผูกไว้กับคำขอหรือวัตถุเซสชัน
นี่คือการกำหนดค่าความปลอดภัยสปริง:
<http pattern="/login.jsp" security="none"/>
<http>
<intercept-url pattern="/**" access="ROLE_USER"/>
<form-login login-page="/login.jsp"
authentication-failure-url="/login.jsp?error=1"
default-target-url="/index.jsp"/>
<logout/>
<csrf />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="test" password="test" authorities="ROLE_USER/>
</user-service>
</authentication-provider>
</authentication-manager>
ไฟล์ login.jsp
<form name="f" action="${contextPath}/j_spring_security_check" method="post" >
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
<button id="ingresarButton"
name="submit"
type="submit"
class="right"
style="margin-right: 10px;">Ingresar</button>
<span>
<label for="usuario">Usuario :</label>
<input type="text" name="j_username" id="u" class="" value=''/>
</span>
<span>
<label for="clave">Contraseña :</label>
<input type="password"
name="j_password"
id="p"
class=""
onfocus="vc_psfocus = 1;"
value="">
</span>
</form>
และแสดงผล html ถัดไป:
<input type="hidden" name="" value="" />
ผลลัพธ์คือสถานะ HTTP 403:
Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
อัปเดต หลังจากดีบักบางอย่างอ็อบเจ็กต์ที่ร้องขอจะออกมาในรูปแบบ DelegatingFilterProxy ที่ดี แต่ในบรรทัด 469 ของ CoyoteAdapter จะดำเนินการ request.recycle (); ที่ลบคุณลักษณะทั้งหมด ...
ฉันทดสอบใน Tomcat 6.0.36, 7.0.50 กับ JDK 1.7
ฉันไม่เข้าใจพฤติกรรมนี้แทนที่จะเป็นไปได้ถ้ามีคนชี้ฉันไปในทิศทางของสงครามตัวอย่างแอปพลิเคชันกับ Spring Security 3.2 ที่ทำงานร่วมกับ CSRF
spring-security.xml
) กับ Spring 4.0.0 RELEASE (GA), Spring Security 3.2.0 RELEASE (GA) (แม้ว่าจะรวมเข้ากับ Struts 2.3.16 ฉันไม่ได้ให้ ลองใช้ Spring MVC เพียงอย่างเดียว) อย่างไรก็ตามมันล้มเหลวเมื่อคำขอเป็นหลายส่วนสำหรับการอัปโหลดไฟล์ที่มีสถานะ 403 ฉันกำลังดิ้นรนเพื่อหาวิธีแก้ไข