1

HttpServletRequest.loginメソッドを使用してユーザーにログインしようとしています。をセットアップし、web.xmlを作成しlogin.xhtml、ログイン ボタンのアクションをバッキング Bean メソッドと呼ばれるメソッドにマップしました。performLogin

問題は、ユーザーがリダイレクトされた場所から URL を取得することです。すなわち。彼は に行こうとしましindex.xhtmlたが、セッションがなかったため、 にリダイレクトされlogin.xhtmlます。最初に彼が要求した URL を取得したいので、RequestDispatcher.FORWARD_REQUEST_URIbalusC で説明されているように、要求マップから読み取ってみます: JSF 2.0 : How to redirect to the protected page after using HttpServletRequest.login

これは、websphere を使用している場合は機能しません。おそらく、転送しないためですが、ユーザーをログイン ページにリダイレクトします。ただし、Websphere 自体は、組み込みのj_security_checkアクションを http フォームで使用すると正しい転送を行うことができるため、これは実現可能である必要があります。

だから、私の質問は基本的にです。Websphere での実行中に、正常にログインしたときにユーザーを正しいページに転送するために、この uri を取得するにはどうすればよいですか?

4

1 に答える 1

2

Websphere でリダイレクト元の URL を取得するには、という名前の Cookie を読み取ることができますWASReqURL。ここで取得した URI には、ホスト名、ポート、およびコンテキスト パスが含まれているため、メソッドでこれらを削除します。

private String getRedirectUrl() {
    Map<String, Object> cookies = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();

    if (cookies.containsKey(WAS_REDIRECT_COOKIE_NAME)) {
        Cookie cookie = (Cookie) cookies.get(WAS_REDIRECT_COOKIE_NAME);

        String url = cookie.getValue();

        String context = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();

        if (url != null && url.contains(context)) {
            url = url.substring(url.indexOf(context) + context.length() + 1);
        }

        return url;
    }
    return null;
}
于 2013-01-16T08:59:19.080 に答える