Ich schreibe einen Jersey Response Filter. Ich benutze Jersey 1.17. Ich möchte Zugriff auf einige Attribute der httpServletRequest in der Filter-API erhalten. Der Weg, den ich gerade mache, ist wie folgt. Ist es sicher, das ServletRequest wie im unten stehenden Snippet zu injizieren, oder wird dies zu Problemen mit Nebenläufigkeit führen? Wenn mehrere Anfragen gleichzeitig eingehen, überschreibt sich der ServletRequest in verschiedenen Anfragen gegenseitig? Danke für deine Hilfe.
%Vor%Abschnitt 9.1 (zuletzt, 5.1 zuvor) Parallelität der JAX- RS-Spezifikation lautet:
Der Kontext ist spezifisch für eine bestimmte Anfrage, aber für bestimmte Fälle JAX-RS-Komponenten (Provider und Ressourcenklassen mit einem Lebenszyklus anders als per-Anfrage) müssen möglicherweise mehrere gleichzeitig unterstützen Anfragen. Beim Injizieren einer Instanz eines der aufgelisteten Typen Abschnitt 9.2, die mitgelieferte Instanz MUSS in der Lage sein, die korrekter Kontext für eine bestimmte Anfrage. Die Verwendung eines lokalen Thread-Proxys ist eine übliche Methode erreiche das.
Gemäß der Spezifikation sind JAX-RS-Implementierungen (z. B. Jersey) erforderlich, um sicherzustellen, dass der Kontext sicher ist. Mach weiter, was du tust.
Siehe auch: Extrahieren von Anforderungsattributen aus der Containeranforderung von Jersey
Sie sind in Sicherheit. Wenn Sie HttpServletRequest
/ HttpServletResponse
injizieren, handelt es sich nicht um eine bestimmte Instanz, sondern um einen Proxy, mit dem Sie Aufrufe einer realen Instanz aufrufen, die in einer ThreadLocal Objekt. Jede Anfrage wird von einem separaten Thread bearbeitet, der Zugriff auf seine eigene HttpServletRequest
/ HttpServletResponse
hat. Neben dem Injizieren von HttpServletRequest
/ HttpServletResponse
können Sie auch ThreadLocal<HttpServletRequest>
/ ThreadLocal<HttpServletResponse>
injizieren und durch '#get ()' können Sie die echten Request / Response-Instanzen von Proxies erhalten.
Tags und Links multithreading jersey concurrency