Wie wird HttpServletRequest in eine Spring-AOP-Anfrage eingefügt (benutzerdefiniertes Szenario)?

7

Ich kenne die Standardmethode zum Schreiben eines AOP-Hinweises um eine Controller-Methode und dass Sie Zugriff auf das HttpServletRequest-Argument erhalten können, wenn es in der Controller-Methode deklariert ist.

Aber mein Szenario besteht darin, dass ich einen Übersetzungsdienst habe, der derzeit sessionsgebunden ist und das Gebietsschema des Benutzers für die Übersetzung verwaltet. Ich denke, das macht den Service Stateful und ich will auch nicht, dass es Session-Bereich ist, wie ich denke, es ist wirklich Singleton. Es gibt jedoch mehrere Stellen, an denen die Übersetzungsdienstmethoden aufgerufen werden. Daher möchte ich die Signatur nicht ändern, um eine Anforderung / Gebietsschema in diesen Methoden hinzuzufügen. Das Problem ist, dass alle Aufrufer der Methoden des Übersetzungsdienstes keinen Zugriff auf HttpServletRequest (nicht Controller-Methoden) haben? Kann ich einen Aspekt um die Methoden des Übersetzungsdienstes schreiben und bekomme irgendwie Zugang zu HttpServletRequest, unabhängig davon, ob er im Kontext des Aufrufers verfügbar ist oder nicht?

%Vor%

Wenn jetzt der Aufrufer von translate nicht HttpServletRequest hat, kann ich keine Anfrage in dem Rat bekommen? Gibt es eine Problemumgehung?

    
Paddy 09.10.2013, 12:18
quelle

1 Antwort

28
  

Kann ich einen Aspekt um die Methoden des Übersetzungsdienstes schreiben und   bekomme irgendwie magisch Zugriff auf HttpServletRequest unabhängig von   ob es im Kontext des Aufrufers verfügbar ist oder nicht?

Nicht leicht. Eigentlich würde es eine Menge Aufwand erfordern.

Der einfachste Weg ist, sich auf RequestContextHolder zu verlassen. In jeder Anfrage bindet die DispatcherServlet die aktuelle HttpServletRequest an ein static ThreadLocal Objekt in der RequestContextHolder . Sie können es abrufen, wenn Sie innerhalb desselben Thread mit

ausführen %Vor%

Sie können dies in der Methode advice() tun und müssen daher keinen Parameter deklarieren.

    
Sotirios Delimanolis 11.10.2013, 21:10
quelle

Tags und Links