2010-05-05 13 views
5

Uso la sicurezza di primavera 3.0.2. Tutte le pagine dell'applicazione sono protette, quindi è necessario autenticarsi per vederle.si perde dopo il login riuscito?

Sto utilizzando il protocollo https.

Ho uno strano problema: dopo aver effettuato correttamente l'accesso e aver visitato la pagina richiesta, quando ho tentato di aprire qualsiasi collegamento ad altre pagine nell'applicazione la sessione è invalidata o persa e l'utente diventa anonimo e reindirizzato alla pagina di accesso . Ho ricevuto questo da debug:

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

Dopo aver esaminato il codice molte volte, nulla nel codice è invalidare la sessione. Qualche idea? Perché potrebbe succedere qualcosa del genere?

risposta

1

app-sicurezza, 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

Sebbene le risposte siano sempre apprezzate, è davvero utile fornire alcune informazioni su come il codice risolve il problema. Fornisci un contesto intorno alla tua risposta e leggi l'[articolo di assistenza] (http://stackoverflow.com/help/how-to-answer) per informazioni su come scrivere ottime risposte. –

+0

Anche io sto affrontando un problema simile, come hai risolto? –

2

potrebbe essere un problema di dominio biscotto o percorso del cookie. Sei una pagina di accesso https sullo stesso percorso/dominio?

+2

Grazie per questa risposta. Ho cercato di accedere dopo la migrazione da Glassfish a WildFly. Ogni volta che ho effettuato l'accesso utilizzando la sicurezza Spring, la sessione è stata persa e un utente anonimo ha creato, causando il ricaricamento della pagina di accesso. Ho cancellato tutti i cookie del browser localhost e ho potuto finalmente accedere! –

+0

@ChrisRitchie Grazie per il tuo commento. Ho avuto lo stesso problema e cancellare i cookie del browser ha risolto il problema per me. –

2

Ho avuto lo stesso problema. Eseguo la migrazione da Jboss 7.0 a Wildfly 8.0, in Jboss 7.0 il comportamento era OK (accesso riuscito e reindirizzamento alla pagina indice), ma in Wilfly l'accesso era riuscito, reindirizzamento alla pagina indice, ma in seguito la sessione è stata persa e Spring Security reindirizza per accedere pagina di nuovo.

Ho visto i cookie nel browser Web (chrome) e ci sono due cookie JSESSIONID nello stesso dominio (127.0.0.1) con valori diversi. Ho cancellato tutti i cookie e ho fatto di nuovo la procedura di registrazione, e questo era ok.

Problemi correlati