2016-04-22 29 views
14

Ciao sono nuovo di Spring Security Sto lavorando su una funzione di login, logout e sessione scaduta. Ho configurato il mio codice facendo riferimento al documento this, il mio codice viene visualizzato di seguito.Come abilitare la sessione e impostare il timeout della sessione in Spring Security

@Override 
    protected void configure(HttpSecurity http) throws Exception { 

     http.authorizeRequests().antMatchers("/admin/**") 
      .access("hasRole('ROLE_USER')").and().formLogin() 
      .loginPage("/login").failureUrl("/login?error") 
       .usernameParameter("username") 
       .passwordParameter("password") 
       .and().logout().logoutSuccessUrl("/login?logout").and().csrf(); 
     http.sessionManagement().maximumSessions(1).expiredUrl("/login?expired"); 
    } 

sostituire la classe AbstractSecurityWebApplicationInitializer

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; 

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer { 

    @Override 
    public boolean enableHttpSessionEventPublisher() { 
    return true; 
} 

} 

Ancora ho bisogno di chiarire se sto facendo bene, se si guarda bene allora dove ho bisogno di timeout della sessione di installazione. Lo sto facendo completamente basandosi sull'annotazione.

risposta

6

Sono stato in grado di risolvere il problema precedente aggiungendo sotto la configurazione solo in web.xml. sarà accettato qualsiasi modo migliore.

<session-config> 
    <session-timeout>20</session-timeout> 
</session-config> 
9

Se si utilizza JavaConfig e non si desidera utilizzare XML è possibile creare un HttpSessionListener e utilizzare getSession().setMaxInactiveInterval(), poi nel Initializer aggiungere l'ascoltatore in onStartup():

public class SessionListener implements HttpSessionListener { 

    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
     System.out.println("session created"); 
     event.getSession().setMaxInactiveInterval(15); 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
     System.out.println("session destroyed"); 
    } 
} 

Poi nel Initializer:

@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    super.onStartup(servletContext); 
    servletContext.addListener(new SessionListener()); 
} 
+0

È anche possibile aggiungere l'ascoltatore come bean, nel caso in cui si avvii l'applicazione in un modo diverso. – Alic

+0

super.onStartup (servletContext); non sta prendendo l'errore di mostrare in intializer – jeevanswamy21