ajax登录弹簧webMVC和弹簧安全

我已经使用Spring Security 3.0作为我们的网站登录机制使用专用的登录网页.现在我需要登录网页,而不是在我们网站上的每个网页上都是一个灯箱/弹出窗口,在登录时,我得到一个AJAX结果,无论是否成功. Spring Security和Spring webmvc 3.0有什么最好的办法?
在客户端,您可以通过ajax模拟正常的表单提交到您的登录URL.例如,在jQuery中:
$.ajax({
    url: "${pageContext.request.contextpath}/j_spring_security_check",type: "POST",data: $("#loginFormName").serialize(),beforeSend: function (xhr) {
        xhr.setRequestHeader("X-Ajax-call","true");
    },success: function(result) {
        if (result == "ok") {
            ...
        } else if (result == "error") {
            ...
        }
    }
});

在服务器端,您可以自定义AuthenticationSuccessHandler和AuthenticationFailureHandler以返回值而不是重定向.因为您可能还需要一个正常的登录页面(为了尝试通过直接url访问受保护的页面),您应该从正常调用通知ajax调用,例如使用头文件

public class AjaxAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    private AuthenticationSuccessHandler defaultHandler;

    public AjaxAuthenticationSuccessHandler() {

    }
    public AjaxAuthenticationSuccessHandler(AuthenticationSuccessHandler defaultHandler) {
        this.defaultHandler = defaultHandler;
    }

    public void onAuthenticationSuccess(HttpServletRequest request,HttpServletResponse response,Authentication auth)
        throws IOException,servletexception {
    if ("true".equals(request.getHeader("X-Ajax-call"))) {
        response.getWriter().print("ok");
        response.getWriter().flush();
    } else {
        defaultHandler.onAuthenticationSuccess(request,response,auth);
    }
}
}

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...