1

JSF、Facelets、Richfaces を使用した Java EE の動的 Web アプリケーションがあります。私のページはすべて xhtml ページです。そのため、JSTL は動作していません。アカウント ページと他のすべての非公開ページにアクセスできるようにするために、ユーザーが接続したかどうかをテストしたいので、セッションの属性HttpSessionが null でないかどうかを確認します。null の場合、ユーザーはようこそページにリダイレクトされます。

私は自分のxhtmlページで試しました:

<jstl:if test="${sessionScope['session']==null}">
 <jstl redirect...>
</jstl:if>-->

しかし、それはjspページではないので機能しません。では、ユーザーが自分のプライベート ページを表示できるようにするために、セッションが null でないかどうかをどこでテストすればよいのでしょうか。集中管理された Bean で?

4

1 に答える 1

3

これの通常の場所はFilter.

クラスを作成し、メソッドimplementsjavax.servlet.Filterに次のロジックを記述します。doFilter()

if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
    // Not logged in, so redirect request to login page.
    ((HttpServletResponse) response).sendRedirect("/login.jsf");
} else {
    // Logged in, so just continue request.
    chain.doFilter(request, response);
}

このフィルターをweb.xml、、url-patternなどの/private/*にマップします。/secured/*/restricted/*

<filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.example.LoginFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>/private/*</url-pattern>
</filter-mapping>

フォルダにプライベート ページがある場合/private、このフィルタが呼び出され、それに応じてセッション内のログイン ユーザの存在が処理されます。

より意味があるので、属性名sessionをに変更したことに注意してください。つまり、それ自体がすでにセッションですuserHttpSessionそうでなければ、あなたのコードをチェック/保守している他の開発者にとって、あいまいすぎて混乱を招く可能性があります。

于 2010-06-30T14:46:25.230 に答える