2010-07-27 1 views
0

Мое приложение - приложение Java EE 6, работающее на Glassfish 3.0.1.Безопасность JavaEE, страницы с ограниченным доступом: пользователь с отключенным доступом перенаправлен правильно. Записанный пользователем не

Я использую Java EE Security с областью JDBC. Поэтому я добавил ограничения на некоторые из моих веб-страниц. Я добавил следующий логин-конфигурации и безопасности, ограничение на мой 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 Status 403 - Доступ к запрошенному ресурсу было отказано

К сожалению, кажется, нет опции, чтобы поймать исключение в моем CustomExceptionHandler. Он даже не отображается на моем сервере.log (хотя я переключился на самый лучший уровень).

Что я могу сделать, чтобы пользователь перенаправлялся на мою страницу с ошибкой, вместо отображения страницы 403? Почему пользователь не перенаправляется на index.jsp, так как он, когда он выходил из системы ???

EDIT:

Просто попытался добавить ошибки-страницу с соответствующим кодом на мой web.xml.

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

Отсутствие эффекта, все же страница ошибки Glassfish вместо моей.

ответ

0

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

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

+0

Я уже скрываю ссылки на ограниченные ресурсы. Но если кто-то вводит адрес в браузер, я хочу, чтобы на нем было отображено правильное сообщение. – ifischer

+0

Зачем платить негатив? Золтан заявил, что он новичок, и он предложил свое решение, может быть, это не рекомендованное решение, но он попытался, верно? – arg20

0

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

+1

Thats no solution for me. Когда я делаю общий переадресацию для всех ошибок 403, я не могу зарегистрировать какую-либо полезную информацию (к которой был ограничен доступ к ресурсу, какой пользователь и т. Д.) И показать некоторые из этих сведений пользователю. – ifischer