2016-11-21 175 views
0

我想爲x分鐘的登錄會話設置超時。登錄會話超時

我創建了一個SessionListener

public class SessionListener implements HttpSessionListener { 

    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
     event.getSession().setMaxInactiveInterval(60 *15); 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { } 
} 

與15分鐘的超時創建會話,但我想,一旦設置此超時用戶在登錄。否則,如果您在登錄頁面等待超過15分鐘並嘗試登錄,會話已被破壞,您將無法登錄(並且啓動了AccessDeniedHandler類)。

回答

0

最後我有一個解決方案。即使用戶未經過身份驗證,Spring爲什麼創建會話的主要原因是針對csrf標記,因此一旦打開頁面,Spring將創建一個會話。我所做的是在創建會話時將會話設置爲無超時。

public class SessionListener implements HttpSessionListener { 

    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
     event.getSession().setMaxInactiveInterval(0); 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { } 
} 

然後,一旦用戶通過驗證(登錄頁面),我設置了超時當前會話:

public class LoginSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { 

    @Autowired 
    private RedirectStrategy redirectStrategy; 

    @Override 
    protected void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException { 

     // Set session timeout when user is authenticated 
     request.getSession().setMaxInactiveInterval(5); 

     redirectStrategy.sendRedirect(request, response, targetUrl); 
    } 

} 

通過這種方式,用戶可以留在登錄頁面,只要它希望和會話永遠不會被破壞。