Как показать Проблемы входа в систему с Spring 3 и RichFaces от AuthenticationFailureHandler? - PullRequest
0 голосов
/ 11 апреля 2011

И спасибо, что читаете меня ...

У меня есть приложение с MVC Pattern с Hibernate, JSF2, RichFaces, Spring 3 ...

У меня работает форма входа,но невозможно показать ошибки входа ... Почему?

контекст приложения :

<sec:form-login login-page="/pages/loginPage.xhtml"
 login-processing-url="/j_spring_security_check"
 authentication-success-handler-ref="myAuthSuccessHandler"
 authentication-failure-handler-ref="myAuthErrorHandler"/>

UserAuthenticationErrorHandler :

public class UserAuthenticationErrorHandler implements AuthenticationFailureHandler {
...
@Override
public void onAuthenticationFailure(HttpServletRequest request,
     HttpServletResponse response, AuthenticationException ae)
     throws IOException, ServletException {

    UsernamePasswordAuthenticationToken user = (UsernamePasswordAuthenticationToken)ae.getAuthentication();
    request.setAttribute("error", "Can you Show me???");
    response.sendRedirect("......");

}
...
}

И, наконец, login.xhtml , который НЕ ПОКАЗЫВАЕТ ОШИБКИ : (

<c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" />

        <c:out value="${error}"/>

        <c:if test="${not empty param.error}">
            Habemus error
        </c:if>

Любая идея ??? Большое спасибо!

1 Ответ

2 голосов
/ 11 апреля 2011
<c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" /> 

отображает атрибут сеанса, опубликованный Spring Security, поэтому он должен работать нормально.

С

request.setAttribute("error", "Can you Show me???");  
...
<c:out value="${error}"/> 

вы пытаетесь отобразить атрибут запроса. Однако атрибуты запроса не переносят перенаправление. Если вам нужно передать сообщение через перенаправление, вместо этого вы можете использовать атрибут сеанса:

request.getSession().setAttribute("error", "Can you Show me???");  

В

<c:if test="${not empty param.error}">

вы проверяете для параметра URL запроса с именем error. Вы должны установить этот параметр при формировании URL перенаправления:

response.sendRedirect("......?error=1");     
...