Мое приложение - это приложение Java EE 6, работающее на Glassfish 3.0.1.
Я использую Java EE Security с JDBC Realm. Поэтому я добавил ограничения на некоторые из моих веб-страниц.
Я добавил следующий логин-config и ограничение безопасности в мой 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, как он, когда он вышел из системы ???
EDIT:
Только что попытался добавить страницу ошибки с соответствующим кодом в мой web.xml.
<error-page>
<error-code>403</error-code>
<location>/index.jsp?login=login</location>
</error-page>
Никакого эффекта, все равно страница с ошибкой Glassfish вместо моей.