2012-08-22 19 views
16

Gibt es eine Möglichkeit, das Sitzungszeitlimit im Frühling anzugeben? Ich kann es nicht in web.xml angeben. Wie ich Session-Bean in Controller wie folgt verwendenSitzungstimeout im Frühjahr einstellen MVC

Ich habe Controller über Spring XML-Dateien konfiguriert.

class xyzController{ 

    ABCSessionScopeClass objectWhichWillBeStoredInSession; 
} 

ich nicht verwenden kann entweder

session.setMaxInactiveInterval(60*60); 

Gibt es eine andere Art und Weise, dies zu tun. Es macht mir nichts aus, Timeout pro Sitzung oder für alle Sitzungen gleichzeitig festzulegen.

+0

Ich möchte das auch wissen. Als ich das durchging, war die * einzige * Möglichkeit, die ich ändern konnte, die Einstellung in web.xml (oder server.xml). – nickdos

+0

Was ist falsch mit setMaxInactiveInterval, ist es nicht ein Teil der Servlet-API? Einige Spring Security Tools rufen zum Beispiel session.invalidate direkt auf, und es gibt keine Probleme damit. –

+1

@BorisTreukhov Es ist nichts falsch daran. Dies ist die letzte Option. Ich möchte nur sicherstellen, dass es noch eine andere Alternative wie die Angabe in der Konfigurationsdatei oder etwas gibt. – JProgrammer

Antwort

0

war ich irgendeine Art und Weise zu finden, nicht in der Lage Session-Timeout-Wert durch alle Spring-Konfigurationsdateien angeben. Ich benutzte <aop:scoped-proxy> Bohne, so dass ich Lese-/Schreib-Wert/Objekt zu Sitzung nicht verwalten muss. Jetzt möchte ich auch das selbe für das Setzen des Zeitlimitwertes der Sitzung, ohne Servlets API zu verwenden. Aber es sieht so aus, als ob es keine andere Möglichkeit als web.xml gibt. So endete Servlet api request.getSession() verwenden, um Timeout-Zeitraum einzustellen. Ich habe den Zeitwert externalisiert, damit ich ihn ohne Neukompilierung des Codes leicht ändern kann. Wenn jemand einen besseren Ansatz gefunden hat, dann zögern Sie nicht zu posten. Wenn es besser gefunden wird, kann ich das als Antwort akzeptieren.

+0

Sie können das Sitzungszeitlimit mit web.xml wie hier beschrieben festlegen: http://stackoverflow.com/questions/12932589/changing-the-default-session-timeout-of-a-spring-web-application –

+1

Wenn Sie sind Mithilfe von Spring Boot können Sie das Sitzungstimeout in application.properties angeben: server.session-timeout = 86400 –

21

Lösung Reines Spring MVC, sevlet context.xml

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

Handler Adapter

@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; 
    } 
} 

mit Angenommen, Sie Feder Sicherheit verwenden,

Für jede erfolgreiche Anmeldung denke ich, beste Weg ist, Erstellen Sie LoginSuccessHandler und geben Sie authentication-success-handler für normales Login sowie remember-me an.

@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

Ich verwende keine Spring-Sicherheit. – JProgrammer

+0

Wenn Sie keine Federsicherheit verwenden, können Sie auch und HandlerInterceptorAdapter verwenden. mit Feder MVC. –