tls combination certificado bad and java spring tomcat https spring-security

java - combination - spring boot add ssl certificate



Spring SecurityContextHolder.getContext(). GetAuthentication() devuelve null después de que se utiliza RedirectView en HTTPS/SSL (1)

Tengo un típico Spring MVC corriendo en Tomcat. Después de cambiar el sistema para que se ejecute en HTTPS (todo funciona correctamente en HTTP plano), el inicio de sesión dejó de funcionar. El motivo es que el objeto SecurityContextHolder.getContext().getAuthentication() vuelve null después de usar RedirectView .

Ya busqué la respuesta, la única que encontré sugerida para establecer la propiedad redirectHttp10Compatible viewResolver a false en la configuración viewResolver bean. Esto no ayudó.

También verifiqué que a lo largo de la redirección, mi ID de sesión sigue siendo la misma y la conexión permanece segura, es decir, no es un problema (al menos hasta donde pude ver) de un cambio entre http y https o viceversa.

¿Cual podría ser el problema?

<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <http auto-config="true"> <intercept-url pattern="/**" requires-channel="https" /> <intercept-url pattern="/index*" access="ROLE_USER"/> <intercept-url pattern="/dashboard*" access="ROLE_USER" requires-channel="https"/> <intercept-url pattern="/login*" access="ROLE_GUEST, ROLE_ANONYMOUS, ROLE_USER"/> <intercept-url pattern="/signin*" access="ROLE_GUEST, ROLE_ANONYMOUS, ROLE_USER"/> <intercept-url pattern="/signup*" access="ROLE_GUEST, ROLE_ANONYMOUS, ROLE_USER"/> <form-login login-page="/home" default-target-url="/home" authentication-failure-url="/home?authentication_error=true" authentication-success-handler-ref="redefineTargetURL" /> <anonymous username="guest" granted-authority="ROLE_GUEST" key="anonymousKey"/> <logout invalidate-session="true" logout-success-url="/logout?message=Logout Successful" /> </http> <authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="userDetailsService" /> </authentication-manager> <beans:bean id="redefineTargetURL" class="com.groupskeed.common.RedefineTargetURL" /> <beans:bean id="userDetailsService" class="com.groupskeed.security.UserDetailsServiceImpl" />


El SecurityContextHolder.getContext().getAuthentication() vuelve nulo después de que el redireccionamiento es correcto, ya que está enfadado. Pero debe ser repoblado de la sesión. Por lo tanto, intente realizar un seguimiento del atributo SPRING_SECURITY_CONTEXT en la sesión. Aquí hay un código de ejemplo para tener una idea:

HttpSession session = request.getSession(true); System.out.println(session.getAttribute("SPRING_SECURITY_CONTEXT"));

En la documentación de Spring Security hay una Parte sobre cómo la conmutación HTTPS / HTTP puede arruinar la sesión, tal vez hay una pista para su problema en algún lugar allí. http://static.springsource.org/spring-security/site/faq.html#d0e223

Las preguntas frecuentes anteriores conducen a un examen de cómo se maneja la sesión en su aplicación. Probablemente comenzaría a buscar en la implementación AuthenticationSuccessHandler. (Puede psot en su pregunta si lo desea).

Para obtener más detalles sobre cómo se maneja el contexto de seguridad en las aplicaciones web, consulte lo siguiente: (sección 5.4): http://static.springsource.org/spring-security/site/docs/3.0.x/reference/technical-overview. html