8

JSF アプリケーションで PrettyFaces を使用しています。このサイトは一部のページにアクセスするために認証を必要とするため、ユーザーがログインしているかどうかを確認するリスナー (prerender ビュー) を使用しています。そのため、ユーザーが /foo (PrettyFaces の前の /foo.jsf) にアクセスしようとすると、リダイレクトしますログインします。

ただし、最初の宛先にリダイレクトしたいので、リクエストパラメーター「next」を付けて、代わりにユーザーを /login?next=/foo にリダイレクトします。残念ながら、リクエスト オブジェクトから元の requestURI を取得できません。次のコードの uri 文字列は、/appname/foo ではなく /appname/foo.jsf です。

ctx = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) ctx.getRequest();
String uri = request.getRequestURI();

元の URI パスを取得する方法はありますか?

4

2 に答える 2

7

PrettyFaces は内部で使用してRequestDispatcher#forward()、プリティ URL を実際の URL に転送します。この手法を使用すると、元のリクエスト URI を key を持つリクエスト属性として使用できますRequestDispatcher#FORWARD_REQUEST_URI

したがって、これは次のようにする必要があります。

String originalURI = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);
// ...
于 2011-10-12T13:03:54.113 に答える
4

次のコードを使用して、元のリクエスト URL を取得します。

PrettyContext.getCurrentInstance().getRequestUrl().toURL()

于 2013-11-14T13:00:14.600 に答える