1

JSF2 と Websphere 8 を使用しています。j_securitycheck を使用してユーザーを認証するログイン フィルターがあります。認証が成功すると、ログインしたユーザーがセッションに入れられます。

このステップの後、セッションからログに記録されたユーザー ID を取得することによって、ユーザーが保護されたリソースを要求したかどうか、および有効なユーザーであるかどうかを確認するセッション管理フェーズ リスナーが実行されます。セッションを取得することはできますが、session.getAttribute("userid") を探すとnull 値が返されます。

セッション管理フェーズ リスナーの代わりにセッション フィルターを試しました。しかし、運がありません。これがコードスニペットです。あなたの助けに感謝。

ログイン フィルタ:

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;
    //authenticate user
        chain.doFilter(request, response);
        HttpSession session = req.getSession(false);
        if(session!=null){
            if(session.getAttribute("userid") == null){
                session.setAttribute("userid", req.getRemoteUser());
            }
        }

        String currentUser = (String)session.getAttribute("userid");
    System.out.println("Login Filter | Current Logged in user: " + currentUser);

}

sessionManagementPhaseListener:

public void beforePhase(PhaseEvent event) {
    if (event != null) {
        FacesContext facesContext = event.getFacesContext();
        if (facesContext != null) {
            HttpServletRequest origRequest = (HttpServletRequest) FacesContext
                    .getCurrentInstance().getExternalContext().getRequest();
            String requestedUrl = origRequest.getRequestURI();
            HttpServletResponse response = (HttpServletResponse) FacesContext
                    .getCurrentInstance().getExternalContext()
                    .getResponse();

            // set the response header here.
            response.addHeader("Pragma", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
            response.addHeader("Cache-Control", "no-store");
            response.addHeader("Cache-Control", "must-revalidate");
            response.addHeader("Expires", "Mon, 8 Aug 2006 10:00:00 GMT"); 
            response.setDateHeader("Expires", -1);

            if (requestedUrl != null
                    && requestedUrl.contains(PROTECTED_FOLDER)) {


                // HttpSession session = (HttpSession) facesContext
                // .getExternalContext().getSessionMap();
                // HttpSession session = origRequest.getSession();

                Map<String, Object> requestMap = facesContext
                        .getExternalContext().getSessionMap();

                if (requestMap == null) {
                    try {
                        String contextPath = requestedUrl.substring(0,
                                requestedUrl.indexOf(PROTECTED_FOLDER));
                        FacesContext.getCurrentInstance()
                                .getExternalContext()
                                .redirect(contextPath + "login.xhtml");
                    } catch (IOException e) {
                        e.printStackTrace();
                        gotoLoginPage(response); // go to login page 

                    }
                }

                else {

                    String currentUser = (String) requestMap.get("userid");
                    System.out.println("Current Logged in user: "
                            + currentUser);
                    if (!isLoginPage
                            && (currentUser == null || currentUser == "")) {
                        try {
                            String contextPath = requestedUrl.substring(0,
                                    requestedUrl.indexOf(PROTECTED_FOLDER));
                            FacesContext.getCurrentInstance()
                                    .getExternalContext()
                                    .redirect(contextPath + "login.xhtml");
                        } catch (IOException e) {
                            // go to login page in case of exceptions
                            e.printStackTrace();
                            gotoLoginPage(response);

                        }
                    }
                }
            }
        }
    }

}
4

0 に答える 0