2016-04-22 17 views
14

Witam Jestem nowy w Spring Security pracuję nad funkcją logowania, wylogowania i limitu czasu sesji. Skonfigurowałem swój kod, odwołując się do dokumentu this, mój kod wygląda poniżej.Jak włączyć sesję i ustawić limit czasu sesji w 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"); 
    } 

przesłonić klasy AbstractSecurityWebApplicationInitializer

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

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer { 

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

} 

Wciąż muszę wyjaśnienia, czy robię dobrze, czy dobrze wygląda to gdzie muszę limit czasu sesji konfiguracji. Robię to w całości na podstawie adnotacji.

Odpowiedz

6

Udało mi się rozwiązać powyższy problem, dodając poniżej config tylko w pliku web.xml. każdy lepszy sposób zostanie zaakceptowany.

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

Jeśli używasz JavaConfig i nie chcą korzystać z języka XML można utworzyć HttpSessionListener i używać getSession().setMaxInactiveInterval(), następnie w Initializer dodać słuchacza w 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"); 
    } 
} 

Następnie w inicjatora:

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

Możesz również dodać detektor jako komponent bean, na wypadek gdyby uruchomiłeś aplikację w inny sposób. – Alic

+0

super.onStartup (servletContext); nie przyjmuje błędu pokazującego w intializatorze – jeevanswamy21