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?
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
Sie können dies in der Methode advice()
tun und müssen daher keinen Parameter deklarieren.
Tags und Links spring-aop