私のアプリは 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 のエラー ページが表示されます。