0

Primefaces 3.5 で Websphere Portal 8 を使用しています。要件は、セッションがタイムアウトしたときに、クリックするとログイン ページに戻るボタンがあるセッション タイムアウト ページにユーザーをリダイレクトすることです。ログイン ページには、[セッション タイムアウト] ページと同様にポートレットが含まれています。どちらも同じポートレット アプリケーション内にあります。ImplicitLogoutFilter を使用して、セッション タイムアウト ページに正常にリダイレクトしています。

@Override
public void logout(HttpServletRequest request, HttpServletResponse response,        FilterChainContext filterContext, LogoutFilterChain chain) throws LogoutException, LoginException {
chain.logout(request, response, filterContext);
if (filterContext.getRedirectURL() != null) {
if (logger.isLoggable(Level.FINEST)) {
logger.logp(Level.FINEST, CLASS_NAME, MethodName.LOGOUT, "Redirecting to session timeout page: " + SESSION_TIMEOUT_PAGE_URL);
}
filterContext.setRedirectURL(SESSION_TIMEOUT_PAGE_URL);
}
}

セッション タイムアウト ページのポートレットには、ログイン ページにリダイレクトするポートレット アクションを呼び出すボタンが含まれています。

public void navigateToPortalPage(String pageUniqueName) throws RpmPortalException {
    final String methodName = "navigateToPortalPage";
    RpmPortalPage portalPage = getNavigationManager().getPortalPage(pageUniqueName, getPortletRequest(), getPortletResponse());
    try {
        FacesContext context = getFacesContext();
        if (context != null) {
            context.getExternalContext().redirect(portalPage.getUrl());
            context.responseComplete();
        }
    } catch (IOException e) {
        RpmExceptionUtils.logAndThrowException(CLASSNAME, methodName + "(" + pageUniqueName + ")", RpmErrorCode.RPM_CONFIG_00004, getLoggedinUser(), e);
    }

}

ただし、ログイン ページに移動する代わりにボタンをクリックすると、代わりに ViewExpired 例外がスローされます。この例外は、例外を処理する例外ハンドラーによって処理され、エラー ページにリダイレクトされ、ユーザーにエラーが表示されます。

私の質問は、セッションの有効期限が切れた後に ViewExpiredException を回避する方法です。この場合、ViewExpiredException が発生することなくログイン ページにリダイレクトできるようにするだけです

よろしくお願いいたします。

4

1 に答える 1

2

私の質問は、この場合 ViewExpiredException が発生することなくログインページにリダイレクトできるようにしたいだけなので、セッションの有効期限が切れた後に ViewExpired Exception を回避する方法です

ログイン ページを のエラー ページとして指定するだけですViewExpiredException

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

(これは、faces サーブレットを にマップしたことを前提としています。*.xhtmlそれ以外の場合は、それに応じて変更します)

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

于 2013-03-14T11:54:48.760 に答える