2016-06-27 18 views
0

Gibt es eine Möglichkeit, aktuelle Sitzung in Spring MVC, aber nicht auf Anfrage zu erhalten. In der Regel erhalten wir eine Anfrage in Action/Controller Klassenmethoden. Von dieser Anfrage erhalten wir eine Sitzung von request.getSession(). Aber gibt es eine Möglichkeit, diese Sitzung ohne dieses Anfrageobjekt zu bekommen?Wie erhalten Sie eine Sitzung im Frühling ohne Anfrage?

Mein Motiv ist, dass ich in einer Utility-Klasse auf einen Wert zugreifen muss, der in Sitzung festgelegt ist, und auf diese Utility-Klasse-Methode von mehr als 50 Methoden der Controller-Klassen zugegriffen wird. Wenn ich eine Sitzung von einer Anfrage bekommen muss, müsste ich alle diese 50 Plätze ändern. Das sieht ziemlich langweilig aus. Bitte schlagen Sie eine Alternative vor.

+1

lesen auf @SessionAttribues und einige Beispiele Online –

+0

finden kann nicht Überschreibung oder 'das Dienstprogramm Methode von Ihnen polymorph'ize? – aksappy

+0

Bitte klären Sie Ihr spezifisches Problem oder fügen Sie zusätzliche Details hinzu, um genau das hervorzuheben, was Sie benötigen. Wie es derzeit geschrieben wird, ist es schwer zu sagen, was genau Sie fragen. Informationen zur Klärung dieser Frage finden Sie auf der Seite "Fragen stellen". –

Antwort

7

Wir können immer HttpSession aus dem Controller-Bereich abrufen, ohne HttpServletRequest zu übergeben.

Spring stellt den Listener bereit, der die Anforderung für den aktuellen Thread verfügbar macht. Sie können sich beziehen RequestContextListener.

Dieser Zuhörer soll

<listener> 
    <description>Servlet listener that exposes the request to the current thread</description> 
    <display-name>RequestContextListener</display-name> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

und dies ist in der web.xml registriert werden, wie Sie Details von Session zu bekommen.

public final User getUser() { 

    RequestAttributes requestAttributes = RequestContextHolder 
      .currentRequestAttributes(); 
    ServletRequestAttributes attributes = (ServletRequestAttributes) requestAttributes; 
    HttpServletRequest request = attributes.getRequest(); 
    HttpSession httpSession = request.getSession(true); 

    Object userObject = httpSession.getAttribute("WEB_USER"); 
    if (userObject == null) { 
     return null; 
    } 

    User user = (User) userObject; 
    return user; 
} 
+1

Das funktioniert. Danke für die Antwort. – romhail

+0

Ich habe RequestContextListener in meiner web.xml hinzugefügt, auf erste Anfrage setze ich das Attribut in der Sitzung. Durch die Verwendung von RequestContextHolder, sind im nächsten Aufruf keine Attribute in der Sitzung. Irgendein Vorschlag – Deepak

Verwandte Themen