Spring防止ajax调用成为身份验证时的目标url

jla*_*s62 5 java ajax spring spring-mvc spring-security

我有一个正在运行的 Spring/Java Web 应用程序。在某些页面上,当我注销时,最后发出的请求是 AJAX 调用。因此,当我重新登录时,Spring 将我重定向到 ajax 调用,给我一个充满 json 的浏览器。我的登录成功处理程序扩展了SavedRequestAwareAuthenticationSuccessHandler.

如何控制成功登录后转发到哪个网址?

jla*_*s62 1

我的解决方案受到 Rob Winch 答案的启发。不过,在我的场景中,Spring正在保存已X-Requested-With: XMLHttpRequest设置的请求。这些是我不得不忽略的请求。

我创建了一个类作为我的自定义RequestCache类。

@Service("customRequestCache")
public class CustomRequestCache extends HttpSessionRequestCache { //this class (bean) is used by spring security

    @Override
    public void saveRequest(HttpServletRequest request, HttpServletResponse response) {
        if (!"XMLHttpRequest".equalsIgnoreCase(request.getHeader("X-Requested-With"))) {
            //request is not ajax, we can store it
            super.saveRequest(request, response);
        } else {
            //do nothing, add some logs if you want
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的 spring 安全配置中:

<http>
    <request-cache ref="customRequestCache" />
</http>
Run Code Online (Sandbox Code Playgroud)

使用此自定义请求缓存类后,将不再存储 ajax 请求。