6

私は JSF アプリケーションで OpenId4Java を使用しています。このような web.xml にセキュリティ制約を追加しました。

<security-constraint>
     <web-resource-collection>
       <web-resource-name>Restricted</web-resource-name>
       <url-pattern>/core/*</url-pattern>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
     </web-resource-collection>
</security-constraint>
<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/user/login.xhtml</form-login-page>
    <form-error-page>/user/logout.xhtml</form-error-page>
  </form-login-config>
</login-config>

アプリケーションが起動し、ユーザーがアクセスしたいとき

http://www.somehost:8080/myapp/core/abc.xhtml

web.xmlの助けを借りて、ユーザーにログイン ページを表示できるようになりました。ここで Google、Yahoo などの openid でログインします。私の質問は、openid に自分のリターン URLをどのように伝えることができるかということです。

http://www.somehost:8080/myapp/core/abc.xhtml

または、ユーザーが

http://www.somehost:8080/myapp/core/xyz.xhtml

この URL でログインに成功すると、ユーザーはこのページに移動します。

4

2 に答える 2

0

ユーザーがアクセスしようとした元のURLを取得するには、変数RequestDispatcher.FORWARD_REQUEST_URIを使用してみてください。

この変数は、他の制限されたページからログインページにリダイレクトされた場合にのみ使用できます。したがって、ユーザーがログインページに直接アクセスした場合に備えて、デフォルトのURLを設定することを忘れないでください。

rrufaiが指摘したように、ユーザーが要求した元のURLが利用可能になったら、認証が完了したら、この記事に記載されている手順に従ってそのURLにリダイレクトできます。

于 2013-03-18T11:13:40.430 に答える
0

リダイレクトを使用して、次のページにコントロールを転送します。

String returnToUrl = returnToUrl("/nextPage.xhtml");
FacesContext.getCurrentInstance().getExternalContext().dispatch(returnToUrl);

これを見てください:

http://blog.enterpriselab.ch/tdmarti/2011/04/06/openid-in-a-web-application-based-on-java-ee-and-jsf-2-0/

アップデート:

どのページからリクエストが行われたかを特定するには、次の投稿を参照してください。

dispatcher.forward(request, response) の後にサーブレットのリクエストから前のページの URL を取得する方法

複数のサーブレット転送後にサーブレット/jsp から元のリクエスト URL を取得する方法

http://www.coderanch.com/t/361942/Servlets/java/Track-Jsp-request-coming-サーブレット

于 2013-03-19T13:25:16.473 に答える