如何通过AuthenticationFailureHandler显示Spring3和RichFaces的登录问题



感谢您阅读我的文章…

我有一个带有Hibernate、JSF2、RichFaces、Spring 3…的MVC模式应用程序

我有登录表单,但不可能显示登录错误。。。为什么?

应用程序上下文

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

有什么想法非常感谢

<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参数。您应该在形成重定向URL时设置该参数:

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

相关内容

  • 没有找到相关文章

最新更新