ウェブサイトで言われたように、私のbeanは私が.xhtml
に電話している場合にのみ実行されます。EL式なしでBeanメソッドを提供する方法
EL式なしでBeanを呼び出すことはできますか?
私のHomeController
がセッションステータスをチェックし、私のhome.xhtml
にあるメソッドを呼び出していて、今度はこのBeanを落とす必要がないので、これが必要です。
ウェブサイトで言われたように、私のbeanは私が.xhtml
に電話している場合にのみ実行されます。EL式なしでBeanメソッドを提供する方法
EL式なしでBeanを呼び出すことはできますか?
私のHomeController
がセッションステータスをチェックし、私のhome.xhtml
にあるメソッドを呼び出していて、今度はこのBeanを落とす必要がないので、これが必要です。
解決策を別の方向に探す必要があります。
コンテナ管理の認証を使用する代わりにユーザー認証を行う場合は、通常、ユーザーがログインしているかどうかを確認する特定の目的でservlet filterを使用します。
サーブレットフィルタは、サーブレット(FacesServlet
など)が特定のURLパターンにマップされているようにすることができます。そのURLパターンに一致するすべての要求に対して呼び出されます。フィルタ内のリクエスト/セッションデータを探索し、フィルタチェーンを継続するか、リダイレクトを送信することによって、リクエスト/レスポンスを適切に処理できます。
これに応じてjavax.servlet.Filter
インターフェイスを実装する必要があります。以下は、@SessionScoped
マネージドBean LoginController
があると仮定して、doFilter()
メソッドを実装する方法の例です。 JSFはセッションスコープのマネージドBeanを属性HttpSession
として保存します。
@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())) {
// ...
}
あなたはそれを呼び出すことができます他のBeanやフェーズリスナーから、または他の場所から取得できます。あなたの質問を明確にすることができますか? –
私はそれを編集しました。詳細情報が必要かどうかを確認してください。 – Gerep