2013-06-04 5 views
15

HttpServletRequest hat Methode:Extract Anfrage Attribute aus dem Behälter Anfrage von Jersey

setAttribute 

Wie kann ich dieses Attribut aus ContainterRequest extrahieren?

Ich habe nicht gefunden: getAttribute Methode!

-Code

public class AuthenticationFilter implements Filter{ 

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest httpReq = (HttpServletRequest) servletRequest; 
     .... .... 
     httpReq.setAttribute("businessId", businessId); 
    } 
} 

In Jersey Filter:

private class Filter implements ResourceFilter, ContainerRequestFilter{ 
    public ContainerRequest filter(ContainerRequest request) { 
     ..extract the attribute from the httpReq 
    } 
} 
+0

Könnten Sie bitte einschließen ein Code, der zeigt, was Sie tun möchten? –

+0

Ich habe meine Frage bearbeitet. Vielen Dank! – Dejell

Antwort

33

können Sie nicht. Sie sind nicht durch die Jersey API in irgendeiner Weise ausgesetzt. Wenn Sie die Jersey-Codebase durchsuchen, werden Sie feststellen, dass HttpServletRequest.getAttributeNames() nicht verwendet wird, wenn Sie massenweise kopiert werden. Sie werden auch feststellen, dass es nur eine Handvoll Verwendungen von HttpServletRequest.getAttribute() gibt, und es ist ausschließlich für die interne Buchhaltung.

Beachten Sie jedoch, dass JAX-RS bei der Bereitstellung in einem Servletkontext die ursprüngliche HttpServletRequest-Instanz mithilfe der @Context-Annotation injizieren kann. Ich bin nicht sicher, ob Sie dies in einem Jersey-Filter tun können, aber es funktioniert in MessageBodyReaders/Writers und in Ressourcenklassen.

Update: Ich habe überprüft, und Sie können in der Tat, injizieren die HttpServletRequest in ein Jersey ContainerRequestFilter durch einfaches einschließlich:

@Context private HttpServletRequest httpRequest; 
+0

Kann ich es in Jersey Filter injizieren? – Dejell

+0

Ja. Siehe mein Update. –

+0

Warum also Jersey nicht einfach erweitert HttpServletRequest? – Dejell

3

Ich habe die @Context arbeiten, haben aber das Problem ist, dass Meine ist Singleton.

Ich musste eine benutzerdefinierte javax.servlet.Filter implementieren und eine ThreadLocal verwenden, um die HttpServletRequest zu speichern.

0

Ich wollte vorherigen beantwortet meine Lösung, zusätzlich zum Hinzufügen Kontext hinzuzufügen:

@Context 
private HttpServletRequest httpRequest; 

Sie sollten set und get Attribute von Sitzung, erhalten:

httpRequest.getSession().setAttribute("businessId", "yourId"); 

Set:

Object attribute = httpRequest.getSession().getAttribute("businessId"); 
Verwandte Themen