JSF Spring Security Access Отказано аутентификации Войти - PullRequest
2 голосов
/ 20 января 2012

Я использую Spring Security 3 в своем веб-приложении jsf2.

Когда пользователь, не прошедший проверку подлинности, пытается получить доступ к защищенному ресурсу, Spring Security перенаправляет на страницу входа.

В таком случае, как я могу показать пользователю на странице входа сообщение о том, что ему / ей не разрешен доступ к ресурсу?

Поскольку Spring Security создает исключение AccessDeniedException в ExceptionTranslationFilter, а затем перенаправляет на страницу входа в систему, я попытался использовать прослушиватель preRenderView на странице входа, который проверяет наличие «WebAttributes.ACCESS_DENIED_403», но это значение равно нулю.

Ответы [ 3 ]

1 голос
/ 20 января 2012

выглядит как дубликат вопроса, упомянутый здесь. ссылка

Как уже упоминалось, создайте экземпляр AccessDeniedHandlerImpl и установите его свойство для вашей пользовательской страницы ошибок. С этой страницы используйте простой javascript для пересылки на фактическую страницу входа, например

 <script language="javascript" type="text/javascript">
 window.setTimeout('window.location="http://localhost:8080/WebApp/login.xhtml"; ',5000);
 </script>

или просто предоставьте кнопку или ссылку на страницу входа.

0 голосов
/ 23 января 2012

Теперь я понимаю, что на самом деле, если пользователь еще не аутентифицирован, генерируется исключение AuthenticationException, и ExceptionTranslationFilter запустит аутентификацию EntryPoint. Поэтому просто добавьте параметр запроса об ошибке следующим образом.

<bean id="exceptionTranslationFilter"
 class="org.springframework.security.web.access.ExceptionTranslationFilter">
 <property name="authenticationEntryPoint" ref="authenticationEntryPoint"/>
</bean>

<bean id="authenticationEntryPoint"
 class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
 <property name="loginFormUrl" value="/login.xhtml?error=true"/>
</bean>

and in your login.xhtml use the param like this

<h:outputText rendered="#{param['error']}" value="Please authenticate first!" />
0 голосов
/ 23 января 2012

добавьте это в ваш web.xml

    <error-page>
       <error-code>403</error-code>
       <location>/pages/errorAccessDenied.xhtml</location>
    </error-page>

, а затем создайте сообщение errorAccessDenied.xhtml со своим сообщением.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://java.sun.com/jsf/html">

<h:head>
</h:head>
<h:body>
     <h:outputText value="You do not have access to the requested resource" />
</h:body>
</html>
...