0

私がウェブサイトで言われ、見つけたように、私の Bean は、.xhtml.

EL式なしでBeanを呼び出すことは可能ですか?

HomeControllerはセッションのステータスをチェックするメソッドを呼び出しておりhome.xhtml、今のところこの Bean をフォールする必要がないため、これが必要です。

4

1 に答える 1

2

別の方向で解決策を探す必要があります。

コンテナー管理認証を使用する代わりにユーザー認証を自作している場合は、通常、ユーザーがログインしているかどうかを確認するという特定の目的のためにサーブレット フィルターを使用します。

FacesServletサーブレット フィルタは、特定の URL パターンにマッピングされるサーブレット ( など) として好きです。その後、その URL パターンに一致するすべてのリクエストで呼び出されます。フィルタ内のリクエスト/セッション データを調べてから、フィルタ チェーンを継続するか、リダイレクトを送信することで、それに応じてリクエスト/レスポンスを処理できます。

javax.servlet.Filterそれに応じてインターフェイスを実装する必要があります。マネージド Bean doFilter()があると仮定して、メソッドを実装する方法のキックオフ例を次に示します。JSF は、セッション スコープのマネージド Bean を の属性として格納します。@SessionScopedLoginControllerHttpSession

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession(false);
    LoginController loginController = (LoginController) (session != null) ? session.getAttribute("loginController") : null;

    if (loginController == null || !loginController.isLoggedIn()) {
        response.sendRedirect(request.getContextPath() + "/login.xhtml"); // No logged-in user found, so redirect to login page.
    } else {
        chain.doFilter(req, res); // Logged-in user found, so just continue request.
    }
}

制限されたページをカバーする URL パターンにこのフィルターをマップします/app/*

@WebFilter("/app/*")
public class LoginFilter implements Filter {
    // ...
}

login.xhtmlもこの URL パターンに含まれており、実際に変更できない場合は更新ifしてから、次のようにブロックを変更します。

if (!request.getRequestURI().endsWith("/login.xhtml") && (loginController == null || !loginController.isLoggedIn())) {
    // ...
}
于 2012-04-27T17:32:13.410 に答える