5

JAAS がリダイレクトする前に、ユーザーが要求した URL を取得することは可能ですか?

私のweb.xmlは次のようなものです:

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsf</form-login-page>
        <form-error-page>/login.jsf</form-error-page>
    </form-login-config>
</login-config>

だから、私がログインしていないときに元に行こうとすると. 次に、アプリは私をlogin.jsfwww.blah.com/myApp/users.jsf にリダイレクトしますが、URL はユーザーが要求したものと同じままです。

次に、ログイン フォームに入力して [ログイン] をクリックします。

public String actionLogin(){
   //do my login and stuff
   return "page that user requested";
}

ユーザーが要求したページを取得するために多くの方法を試しました。request.getRequestURL()

すべてが私を返しました:www.blah.com/myApp/login.jsf

要求されたページを取得する方法はありますか?www.blah.com/myApp/users.jsf

よろしく

4

1 に答える 1

2

ログインページは、サーバー側によって内部的に開かれますRequestDispatcher#forward()。したがって、これは、最初に要求されたページが、RequestDispatcher.FORWARD_REQUEST_URI定数で指定された名前の要求属性として使用できることを意味します。したがって、JSFの用語では、次のように利用できます。

String originalURI = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);
String originalQuery = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_QUERY_STRING);

if (originalQuery != null) {
    originalURI+= "?" + originalQuery;
}

null(返される場合、つまり、制限されたURLに最初にヒットせずに直接開かれた場合のフォールバックURLがあることに注意してください)

@ViewScopedそれを収集するのに最適な場所は、ログインページに関連付けられたBeanの(ポスト)コンストラクターです。

参照:

于 2012-12-19T17:12:37.960 に答える