2012-08-22 20 views
16

Esiste un modo per specificare il timeout della sessione in primavera? Non riesco a specificarlo nel web.xml. Poiché sto utilizzando il bean dell'ambito della sessione nel controller nel modo seguenteimpostazione del timeout della sessione in Spring MVC

Ho configurato il controller tramite i file xml primaverili.

class xyzController{ 

    ABCSessionScopeClass objectWhichWillBeStoredInSession; 
} 

non posso usare questa sia

session.setMaxInactiveInterval(60*60); 

C'è un altro modo di fare questo. Non mi interessa impostare il timeout per sessione o per tutte le sessioni allo stesso tempo.

+0

Mi piacerebbe saperlo anche questo. Quando ho passato questo, il * solo * modo in cui potevo cambiarlo era con l'impostazione in web.xml (o server.xml). – nickdos

+0

Cosa c'è di sbagliato in setMaxInactiveInterval, non è una parte dell'API del servlet? Alcuni strumenti di sicurezza primaverili chiamano session.invalidate direttamente, ad esempio, e non ci sono problemi con esso. –

+1

@BorisTreukhov Non c'è niente di sbagliato in questo. Questa è l'ultima opzione. Voglio solo assicurarmi che ci siano altre alternative come specificare nel file di configurazione o qualcosa del genere. – JProgrammer

risposta

0

non ero in grado di trovare un modo per specificare il valore di timeout di sessione tramite qualunque file di configurazione di primavera. Stavo usando il bean <aop:scoped-proxy> in modo da non dover gestire read/write value/object alla sessione. Ora, voglio anche lo stesso per impostare il valore di timeout della sessione, senza usare l'API servlet. Ma sembra che non ci sia modo di specificarlo diverso dal file web.xml. Così finito per usare servlet api request.getSession() per impostare il periodo di timeout. Ho esternalizzato il valore temporale in modo che possa facilmente cambiarlo senza ricompilare il codice. Se qualcuno ha trovato un approccio migliore, sentiti libero di postare. Se trovato meglio, posso accettarlo come risposta.

+0

È possibile specificare il timeout della sessione utilizzando web.xml come descritto qui: http://stackoverflow.com/questions/12932589/changing-the-default-session-timeout-of-a-spring-web-application –

+1

Se sei utilizzando Spring Boot, è possibile specificare il timeout della sessione in application.properties: server.session-timeout = 86400 –

21

soluzione utilizzando Pure Spring MVC, context.xml sevlet

<mvc:interceptors> 
    <bean class="com.xxx.SessionHandler" /> 
</mvc:interceptors> 

Handler adattatore

@Component 
public class SessionHandler extends HandlerInterceptorAdapter { 
    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
     request.getSession().setMaxInactiveInterval(60*60); 
     return true; 
    } 
} 

Supponendo che si utilizza la protezione di primavera,

Per ogni login riuscito penso meglio è per creare LoginSuccessHandler e specificare l'autenticazione-successo-gestore per l'accesso normale e ricordare-me.

@Service 
public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { 
    @Override 
    public void onAuthenticationSuccess(
      HttpServletRequest request, 
      HttpServletResponse response, 
      Authentication authentication) throws ServletException, IOException { 
     request.getSession().setMaxInactiveInterval(60*60); 
     super.onAuthenticationSuccess(request, response, authentication); 
    } 

} 

 

<http auto-config="true" use-expressions="true"> 
    <form-login login-page="/login" 
     authentication-failure-url="/login.hst?error=true" 
     **authentication-success-handler-ref="loginSucessHandler"** /> 
    <logout invalidate-session="true" logout-success-url="/home" logout-url="/logout" /> 
    <remember-me key="jbcp" **authentication-success-handler-ref="loginSucessHandler"**/> 
    <session-management> 
     <concurrency-control max-sessions="1" /> 
    </session-management> 
</http> 
+0

Non utilizzo la sicurezza Spring. – JProgrammer

+0

se non si utilizza la sicurezza Spring, è possibile utilizzare anche e HandlerInterceptorAdapter. con Spring MVC. –

Problemi correlati