Безопасность JavaEE, Доступ к страницам с ограниченным доступом: зарегистрированный пользователь перенаправлен правильно. Войти в систему пользователь не - PullRequest
0 голосов
/ 27 июля 2010

Мое приложение - это приложение 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 вместо моей.

Ответы [ 2 ]

0 голосов
/ 14 августа 2010

Попробуйте перенаправить ошибку 403 на страницу, отличную от index.jsp, на которой будет отображаться сообщение об ошибке.

0 голосов
/ 27 июля 2010

Я просто новичок в javaEE, но я думаю, что проблема в том, что контейнер перенаправляет пользователей сразу после ошибки 401 HTTP, когда он не авторизован. 403 Ошибка означает, что он знает имя пользователя / pwd, но он не подходит для этого ресурса.

Так что я бы попытался написать фильтр для этой ошибки 403 и перенаправить вручную. Или вы должны скрыть ссылку на эту страницу для студентов, если это возможно.

...