2010-06-02 11 views
39

Ich muss meinem Benutzer ein Web-Interface geben, um das Session-Timeout-Intervall zu ändern. So können verschiedene Installationen der Webanwendung unterschiedliche Timeouts für ihre Sitzungen haben, aber ihre web.xml kann nicht anders sein.Wie wird das Sitzungszeitlimit in Java-Webanwendungen dynamisch festgelegt?

Gibt es eine Möglichkeit, das Session-Timeout programmatisch einzustellen, so dass ich z. B. ServletContextListener.contextInitialized() verwenden konnte, um das konfigurierte Intervall zu lesen und es beim Start der Anwendung zu setzen?

Vielen Dank.

Antwort

63

Verwenden Sie anstelle eines ServletContextListener einen HttpSessionListener. In der sessionCreated() Methode können Sie das Sitzungszeitlimit programmgesteuert festlegen.

public class MyHttpSessionListener implements HttpSessionListener{ 
    public void sessionCreated(HttpSessionEvent event){ 
    event.getSession().setMaxInactiveInterval(15*60); //in seconds 
    } 
    public void sessionDestroyed(HttpSessionEvent event){} 
} 

Und vergessen Sie nicht, den Hörer im Deployment Descriptor zu definieren:

<webapp> 
... 
    <listeners> 
    <listener-class>com.example.MyHttpSessionListener</listener-class> 
    </listeners> 
</webapp> 

Trotzdem würde ich empfehlen, verschiedene web.xml-Dateien für jede Anwendung das Erstellen und Definieren der Session-Timeout gibt:

<webapp> 
... 
    <session-config> 
    <session-timeout>15</session-timeout> <!-- in minutes --> 
    </session-config> 
</webapp> 
+0

Gibt es eine Möglichkeit, die statische 15 * 60 durch eine Variable zu ersetzen, die von der Webseite an den HTTP-Listener übergeben wird (um die Timeouts zu wählen, die alle neu erstellten Sitzungen betreffen)? – user2133558

31

Gibt es eine Möglichkeit, das Session-Timeout einstellen programmatisch

Es gibt grundsätzlich drei Möglichkeiten, um den Session-Timeout-Wert zu setzen:

  • durch die session-timeout in dem Standard web.xml Datei ~ oder ~
  • in Abwesenheit dieses Elements, indem Sie den Standardwert des Servers session-timeout erhalten (und damit auf Serverebene konfigurieren) ~ oder ~
  • programmgesteuert mithilfe der HttpSession. setMaxInactiveInterval(int seconds)-Methode in Ihrem Servlet oder JSP.

Aber beachten Sie, dass die spätere Option den Timeout-Wert für die Sitzung aktuellen setzt, ist dies nicht eine globale Einstellung ist.

0

Wie ein anderer anwsers sagte, können Sie in einem Session Listener ändern. Sie können es jedoch direkt in Ihrem Servlet ändern.

+2

Ja, es ist möglich, aber es garantiert nicht "wann" es passiert .. Und hängt vom Lebenszyklus Ihres Servlet ab .. es ist eine Option .. ok .. Nore: Der Listener wird es immer auf create event setzen. –

Verwandte Themen