Depois de configurar o Spring Security 3.2, _csrf.token
não está vinculado a uma solicitação ou a um objeto de sessão.
Esta é a configuração de segurança da primavera:
<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>
O arquivo 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>
E ele renderiza o próximo html:
<input type="hidden" name="" value="" />
O resultado é o status HTTP 403:
Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
UPDATE Depois de alguma depuração, o objeto de solicitação sai de forma fina DelegatingFilterProxy, mas na linha 469 de CoyoteAdapter ele executa request.recycle (); que apaga todos os atributos ...
Testo no Tomcat 6.0.36, 7.0.50 com JDK 1.7.
Eu não entendi esse comportamento, ao invés de, seria possível se alguém me apontasse na direção de alguma guerra de amostra de aplicativo com Spring Security 3.2 que funciona com CSRF.
web.xml
é crucial. MultipartFilter
deve ser declarado antes springSecurityFilterChain
. Espero que ajude. Obrigado.
spring-security.xml
) com Spring 4.0.0 RELEASE (GA), Spring Security 3.2.0 RELEASE (GA) (embora seja integrado com Struts 2.3.16. Eu não dei um experimente apenas com Spring MVC). No entanto, ele falha, quando a solicitação é multiparte para upload de arquivos com o status 403. Estou lutando para encontrar uma solução para isso.