4

JSFでセッションが期限切れになった後、アプリケーションをログインページにリダイレクトするweb.xmlの構成はありますか?
これを見つけましたが、うまくいきませんでした。

 <error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/faces/index.xhtml</location>
</error-page>

このための構成がない場合、JSF でこれを行うにはどうすればよいですか?
ありがとう

4

3 に答える 3

2

考えられる答え:現在のビューに応じて ViewExpiredException を処理します

私が使用しているのは、AjaxErrorHandlerと呼ばれる PrimeFaces - Extensions 固有のソリューションです。実装のヒントについては、ショーケースをご覧ください。

私の知る限り、上記の構成は AJAX リクエストでは機能しません。

于 2012-10-18T07:18:38.640 に答える
1

別の可能な答え: jsf アプリケーションでセッション タイムアウトが発生した場合にインデックス ページにリダイレクトする方法

さらに別の可能な答え: を使用しJSF PhaseListenerます。


さらに、セッションがすでに有効かどうかを確認するために a を使用することをお勧めしFilterます。そうでない場合は、カスタム エラー ページにリダイレクトします (おそらく BalusC を通じてこの方法をどこで学んだか覚えていません)。

public class AuthenticationFilter implements Filter {
    private FilterConfig config;

    public void init(FilterConfig filterConfig) throws ServletException {
        this.config = filterConfig;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if(((HttpServletRequest) request).getSession().getAttribute("some_attribute_you_store_in_Session") == null){
            ((HttpServletResponse)response).sendRedirect("yourCustomJSF.jsf");
        }else{
            chain.doFilter(request, response);
        }
    }

    public void destroy() {
        this.config = null;
    }

    // You also have to implement init() and destroy() methods.
}

次に、このフィルター (およびフィルターをトリガーする URL パターン) を web.xml で宣言する必要があります。

<filter>
    <filter-name>AuthenticationFilter</filter-name>
    <filter-class>yourPackage.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>AuthenticationFilter</filter-name>
    <url-pattern>private.jsf</url-pattern>
</filter-mapping>

ユーザー情報を保持できるように、独自の Bean を JSF セッションに保存します。クラスへのアクセス中にフィルターがnullリターンを受け取ると、セッションが無効になっていることがわかり (期限が切れたか、ユーザーがログアウトしたため)、リクエストをエラー ページにリダイレクトします。

于 2012-10-18T07:52:47.383 に答える
0

これを見つけましたが、うまくいきませんでした。

それはうまくいくはずです。ほとんどの場合、ajax リクエストのみを使用していました。この方法では、標準のweb.xmlエラー ページ メカニズムはまったく使用されません。代わりに JSFExceptionHandler機能を使用する必要があります。

JSF ユーティリティ ライブラリOmniFacesには、FullAjaxExceptionHandlerまさにこの目的のために設計された があります。ajax リクエスト中の例外/エラーの標準web.xmlエラー ページ メカニズムを再利用します。ショーケース デモはこちらでご覧いただけます。も扱いますViewExpiredException

以下も参照してください。

于 2012-10-18T11:17:38.800 に答える