2015-02-12 9 views
9

Sto sviluppando un'applicazione con Spring Boot e Spring Security avviando la classe Application in Eclipse con un Tomcat incorporato. Ogni volta che riavvio il server, la mia sessione scompare e devo accedere di nuovo che diventa abbastanza fastidioso.Abilita la persistenza della sessione con Spring Boot e Tomcat incorporato

È possibile mantenere le sessioni tra riavvii del server?

ho visto questa altra domanda su StackOverflow in cui qualcuno chiede il contrario, che mi fa pensare che questo dovrebbe effettivamente lavorare out-of-the-box:

How to disable Tomact session persistence in Spring Boot via Manager pathname?

Io corro Primavera Boot 1.2 .1 con Gradle.

btw, so di Spring Loaded, ma a volte un riavvio del server è inevitabile.

+0

Hai controllato questi post: [JDBC Session Persistence] (http://stackoverflow.com/questions/20507749/how-can-i-make-the-spring-security -stores-the-http-session-in-database-così-i-can? answertab = attivo # tab-top) e [FilterInvocationInterceptor Bean] (http://stackoverflow.com/questions/1587423/spring-not-restoring -tomcat-persistent-sessions-to-session-registry-after-restar? answertab = active # tab-top)? – lgd

+0

assicurati anche che tutto ciò che hai messo in sessione sia serializzabile –

risposta

4

L'ho appena scoperto. Ogni volta che l'applicazione viene avviata, Spring genera una nuova directory temporanea casuale in /tmp per la directory di base di Tomcat (ad esempio /tmp/tomcat.5990562997404648887.8080). Poiché utilizza ogni volta una cartella diversa, Tomcat non ha modo di ripristinare la sessione.

Questo può essere risolto impostando la propria directory di base con server.tomcat.basedir=/tmp. Tuttavia, non ritengo questo una correzione in quanto richiede l'impostazione di un sistema operativo directory specifica, così ho aperto un bug su questo: https://github.com/spring-projects/spring-boot/issues/2490

6

Secondo primavera questo sarà fissato in 1.3.0.M2 e eventualmente in 1.3.0.RELEASE

Quindi tutto ciò che devi fare è aggiungere la seguente riga al tuo file application.properties.

server.session.persistent=true 

Riferimento https://github.com/spring-projects/spring-boot/issues/2490

aggiornamento Tomcat, Jetty e Undertow per serializzare i dati della sessione quando l'applicazione viene arrestato e inserirla nuovamente quando l'applicazione riavvio.

Le sessioni persistenti sono attivate; impostando persistentSession su ConfigurableEmbeddedServletContainer o utilizzando la proprietà server.session.persistent=true.

Correzioni GH-2490

+3

Sì, questo è ora risolto - vale anche la pena ricordare che devtools abilita questo flag di default. – berry120

+1

Ho questo e continuo a perdere le mie autenticazioni Spring dopo il riavvio del server. :( –