2011-07-30 5 views
4

問題があります。私はjsf2でログインせずにユーザーがページにアクセスするのを防ぎたい。ユーザーが制限されたページのURLをブラウザに直接書き込むと、そのページは表示されません。上記のような状況が起こると、ログインページにリダイレクトする必要があります。これをプログラムで行うにはどうすればよいですか?Jsf2でログインしないで制限付きページにアクセスしないようにする

答えて

12

どのように依存していることログインをプログラムしました。セッションスコープのマネージドBeanのプロパティとしてログインしているユーザーを設定する、自社認証を使用しているようです。 Java EEではコンテナ管理によるログインが提供されているため、制限されたページへのアクセスを防止することはすでに考慮されています。すべてのあなたのセッションは、Beanのスコープ/app/*/secured/*などのようにしていること、特定のURLパターンのページを制限された管理対象Bean名userを持ってきたと仮定すると

、あなたは仕事のためfilterを使用することができます。

@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); 
    User user = (session != null) ? (User) session.getAttribute("user") : null; 

    if (user == null || !user.isLoggedIn()) { 
     response.sendRedirect("/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パターンにこのフィルタの地図:doFilter()方法で次のように実装します。

さらに、これらのページでブラウザキャッシュを無効にしておく必要があります。そうしないと、ログアウト後もエンドユーザーは引き続きブラウザのキャッシュからそのキャッシュを見ることができます。このためにフィルタを使用することもできます。あなたは同じフィルターでそれを行うことさえできます。 Browser back button doesn't clear old backing bean valuesも参照してください。

1

あなたはフィルタを書いて試してみました...あなたはログインページにユーザーをリダイレクトすることができない場合は、ユーザーがページへのアクセス権を持っている場合、すべての呼び出しがチェック傍受することができます...

関連する問題