1

我正在使用弹簧安全登录+ ajax 登录。如果用户提供了错误的凭据,我需要显示一条消息“无效的用户/密码”

这是ajax登录jquery代码。

$(document).ready(function(){
$('#login_btn').click(function(){
    //alert("aaa"+validateLoginForm());
    if(validateLoginForm()){

        sprpst = 'j_username='+$('#j_username').val()+'&j_password='+$('#j_password').val();
        $.post('j_spring_security_check',sprpst,function(data1) {

            window.location.reload();

        }); 
        $.blockUI({ message : '<h1><img src="images/busy.gif" /> Loading...</h1>' });
    }
});
});

这是spring安全登录

<form-login login-page="/login" default-target-url="/deals" authentication-failure-url="/deals?login_error=1"/>

任何帮助将不胜感激。

谢谢 :)

4

1 回答 1

2

你需要:

  1. 提供自定义 AuthenticationEntryPoint(可以使用默认 LoginUrlAuthenticationEntryPoint 作为基类)。在AuthenticationEntryPoint.commence(...)方法中检查这是 AJAX 调用并返回 403 代码,而不是重定向到登录页面。
  2. 在 Spring Security conf 中设置您的自定义 AuthenticationEntryPoint。
  3. 检查 AJAX 响应的代码。如果它包含 403,则显示有关错误凭据的相应错误消息。

自定义身份验证入口点的代码可能如下所示:

public class CustomAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {

    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
        String header = request.getHeader("X-Requested-With");
        if (StringUtils.hasText(header) && header.equals("XMLHttpRequest") && authException != null) {
            response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
        } else {
            super.commence(request, response, authException);
        }
    }
}
于 2013-03-26T10:02:47.847 回答