0

私のアプリは Glassfish 3.0.1 で動作する Java EE 6 アプリケーションです。

JDBC Realm で Java EE Security を使用しています。そこで、いくつかの Web ページに制限を追加しました。次の login-config と security-constraint を web.xml に追加しました。

<!-- Redirect access of restricted pages to index.jsp -->
<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>jdbc</realm-name>
  <form-login-config>
    <form-login-page>/index.jsp?login=login</form-login-page>
    <form-error-page>/index.jsp?login=error</form-error-page>
  </form-login-config>
</login-config>

<!-- Restrict access for deanery related resources -->
<security-constraint>
  <display-name>Deanery Constraint</display-name>
  <web-resource-collection>
    <web-resource-name>Deanery Content</web-resource-name>
    <description />
    <url-pattern>/deanery/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <description />
    <role-name>DEANERY</role-name>
  </auth-constraint>
</security-constraint>

ユーザーがログアウトしている場合、これは正常に機能します。/deanery/ のページにアクセスしようとすると、index.jsp (jsf にリダイレクト) にリダイレクトされます。

ユーザーがログインして適切な役割を取得すると、制限されたリソースに正常にアクセスできます。だからここまでは大丈夫。

問題: 権限の低いユーザー (私の例では学生) がアプリケーションにログインし、制限されたページにアクセスしようとすると、web.xml で構成されたエラー ページにリダイレクトされません。代わりに、醜い Glassfish 403 ページが表示されます。

HTTP ステータス 403 - 要求されたリソースへのアクセスが拒否されました

残念ながら、私のCustomExceptionHandlerで例外をキャッチするオプションはないようです。私のserver.logにも表示されません(ただし、最高レベルに切り替えました)。

ユーザーが 403 ページを表示する代わりにエラー ページにリダイレクトされるようにするにはどうすればよいですか? ユーザーがログアウトしたときのように、ユーザーが index.jsp にリダイレクトされないのはなぜですか?

編集:

対応するコードを含むエラーページを web.xml に追加しようとしました。

<error-page>
  <error-code>403</error-code>
  <location>/index.jsp?login=login</location>
</error-page> 

効果はありません。自分のページではなく Glassfish のエラー ページが表示されます。

4

2 に答える 2

0

私はJavaEEの初心者ですが、問題は、401 HTTPエラーの直後にコンテナがユーザーをリダイレクトすることだと思います。403 エラーは、ユーザー名/パスワードはわかっているが、そのリソースには適していないことを意味します。

そこで、この 403 エラー用のフィルターを作成して、手動でリダイレクトしようとしました。または、可能であれば、このページへのリンクを学生に非表示にする必要があります。

于 2010-07-27T15:16:26.747 に答える
0

エラー メッセージを表示する index.jsp とは別のページへの 403 エラー リダイレクトを試してください。

于 2010-08-14T01:11:56.950 に答える