Wie bekomme ich eine SessionScoped CDI-bean aus einem Filter?

Diese Frage ist in Bezug auf einen vorherigen auf schreiben Sie einen session-timeout-handler -.

Die Antwort in diesem thread beteiligten den Zugriff auf die verschiedenen session-scoped managed beans aus dem servlet. Die Empfehlung (wie gesehen hier) ist dazu in die filter:

HttpSession session = request.getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;

Vermutlich diese holt eine session-bean der Klasse Benutzer. Das problem ist das funktioniert nicht.

Was schief geht sind, dass die Bohnen gibt es in der session-Attribute, aber Sie sind eingehüllt durch Schweißen Einrichtungen. Ich schrieb die doFilter () - Methode wie folgt:

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    String sp = req.getServletPath();
    System.out.println("------------------------");
    System.out.println("doFilter(): " + sp);

    if (!sp.startsWith("/javax")) {  //eliminates many requests
        HttpSession session = req.getSession();
        Enumeration<String> en = session.getAttributeNames();
        int count = 0;            
        while (en.hasMoreElements()) {
            String e = en.nextElement();
            System.out.println("Attribute " + ++count + ": " + e);
        }
    }
    chain.doFilter(request, response);
}

Wenn diese dumps aus der session-Attribute, die ich in der Regel erhalten Sie so etwas wie dieses:

INFO: ------------------------
INFO: doFilter(): /Display.xhtml
INFO: Attribute 1: org.jboss.weld.context.http.HttpSessionContext#org.jboss.weld.bean-WEB-INF/lib/myfaces-extcdi-bundle-jsf20-1.0.1-ManagedBean-class org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.EditableWindowContextManagerProxy
INFO: Attribute 2: org.jboss.weld.context.http.HttpSessionContext#org.jboss.weld.bean-MyApp5-ManagedBean-class com.app.Login
INFO: Attribute 3: org.jboss.weld.context.conversation.ConversationIdGenerator
INFO: Attribute 4: com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap
INFO: Attribute 5: org.jboss.weld.context.ConversationContext.conversations
INFO: Attribute 6: facelets.ui.DebugOutput
INFO: Attribute 7: javax.faces.request.charset
INFO: Attribute 8: org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext:EXISTING_WINDOW_ID_LIST

Attribut #2 scheint die Bohne, was ich will. Unnötig zu sagen, ein Aufruf Sitzung.getAttribute("login") nicht funktioniert.

Kann mir jemand sagen, wie man Zugriff auf die zugrunde liegenden managed bean? Ich würde es vorziehen, es zu tun in einer Weise, die war nicht gebunden zu Schweißen, aber das kann nicht möglich sein.

InformationsquelleAutor AlanObject | 2011-10-19
Schreibe einen Kommentar