感谢您阅读我的文章…
我有一个带有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");