2010-05-05 15 views
5

Estoy usando spring security 3.0.2. Todas las páginas de la aplicación están protegidas, , por lo que debe estar autenticado para poder verlas.sesión se pierde después de un inicio de sesión exitoso?

Estoy usando el protocolo https.

Tengo un problema extraño: después de iniciar sesión correctamente y acceder a la página solicitada, cuando intento abrir un enlace a otras páginas de la aplicación la sesión se invalida o se pierde y el usuario se vuelve anónimo y se redirige a la página de inicio de sesión . Tengo este de depuración:

No HttpSession currently exists 
No SecurityContext was available from the HttpSession: null. A new one will be created. 

Después de revisar el código muchas veces, no hay nada en el código está invalidando la sesión. ¿Algunas ideas? ¿Por qué podría suceder algo como esto?

Respuesta

1

aplicación seguridad, xml:

<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.0.xsd 
         http://www.springframework.org/schema/security 
         http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

    <global-method-security pre-post-annotations="enabled"> 

    </global-method-security> 
    <http use-expressions="true" disable-url-rewriting="true"> 
     <remember-me token-repository-ref="tokenRepository" 
     token-validity-seconds="1209600"/> 
     <access-denied-handler error-page="/error.jsp"/> 

     <intercept-url pattern="/" access="permitAll" /> 
     <intercept-url pattern="/**/images/**" filters="none" /> 
     <intercept-url pattern="/**/files/**" filters="none" /> 
     <intercept-url pattern="/images/**" filters="none" /> 
     <intercept-url pattern="/scripts/**" filters="none" /> 
     <intercept-url pattern="/styles/**" filters="none" /> 
     <intercept-url pattern="/p/login" filters="none" /> 
     <intercept-url pattern="/p/register" filters="none" /> 
     <intercept-url pattern="/p/forgotPassword" filters="none" /> 
     <intercept-url pattern="/p/changePassword" filters="none" /> 
     <intercept-url pattern="/p/**" access="isAuthenticated()" /> 
     <custom-filter position="LAST" ref="rememberMeFilter"/>  
     <form-login     
      login-processing-url="/j_spring_security_check"   
      login-page="/p/login" 
      authentication-failure-url="/p/login?login_error=1"  
      authentication-success-handler-ref="myAuthenticationHandler"    
     /> 

     <logout /> 
    </http> 

    <beans:bean id="myAuthenticationHandler" class="com.myAuthenticationHandler" /> 
    <beans:bean id="rememberMeFilter" class="com.rememberMeFilter" /> 

    <beans:bean id="tokenRepository" class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl"> 
    <beans:property name="dataSource" ref="dataSource"/> 
    </beans:bean> 


    <authentication-manager alias="authenticationManager"> 
    <authentication-provider> 

      <password-encoder hash="md5"/>   
      <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query="SELECT u.username,u.password,u.enabled 
           FROM Users u where u.username=lower(?)"  
     authorities-by-username-query="SELECT a.username,a.authority  
           FROM Users u, authorities a 
           WHERE u.username=a.username 
           and u.username=lower(?) and enabled=1"/> 

     </authentication-provider> 
    </authentication-manager> 

    </beans:beans> 
+0

Si bien siempre se agradecen las respuestas, realmente ayuda a proporcionar cierta información sobre cómo su código resuelve el problema en cuestión. Proporcione un contexto que rodee su respuesta y consulte el [artículo de ayuda] (http://stackoverflow.com/help/how-to-answer) para obtener información sobre cómo escribir respuestas excelentes. –

+0

También estoy enfrentando un problema similar, ¿cómo lo resolvió? –

2

podría ser un problema de dominio de la cookie o ruta de cookies. ¿Eres la página de inicio de sesión https en la misma ruta/dominio?

+2

Gracias por esta respuesta. Intenté iniciar sesión después de migrar de Glassfish a WildFly. Cada vez que me conecté con éxito usando la seguridad de primavera, la sesión se perdió y se creó un usuario anónimo que causó que la página de inicio de sesión se recargara. Borré todas las cookies del navegador localhost y finalmente pude iniciar sesión. –

+0

@ChrisRitchie Gracias por tu comentario. Tuve el mismo problema, y ​​borrar las cookies del navegador me solucionó el problema. –

2

Tuve el mismo problema. Migro de Jboss 7.0 a Wildfly 8.0, en Jboss 7.0 el comportamiento fue correcto (inicio de sesión exitoso y redirigir a la página de índice), pero en Wilfly el inicio de sesión fue exitoso, redirigí a la página de índice pero luego la sesión se perdió y Spring Security redirigió al inicio de sesión página otra vez

Vi las cookies en el navegador web (chrome) y allí dos cookies JSESSIONID en el mismo dominio (127.0.0.1) con diferentes valores. Eliminé todas las cookies e hice el procedimiento de volver a iniciar sesión, y esto estuvo bien.

Cuestiones relacionadas