2011-04-11 78 views
0

,並感謝您閱讀我...如何通過AuthenticationFailureHandler顯示登錄Spring 3和RichFaces的問題?

我與MVC模式與Hibernate,JSF2,RichFaces的,春季3應用程序...

我的登錄表單的工作,但it's不可能顯示登錄錯誤...爲什麼?

應用上下文

<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> 

任何想法 ??? 非常感謝!

回答

2
<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}"> 

您檢查是否存在名爲error請求網址參數。形成時重定向URL你應該設置參數:

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

你好,是的,that's確定,但我沒有JSTL標籤庫在我的項目中,只有JSF2 ... 如果我沒有JSTL標籤庫,如何使用jsf2標籤庫編寫分支「錯誤」? – ganzux 2011-04-11 14:35:46

+0

@ganzux:我不熟悉JSF。你可以簡單寫'$ {error}',但它不會被HTML轉義。 – axtavt 2011-04-11 14:38:05

+0

謝謝,它的作品! :-) – ganzux 2011-04-11 15:12:52