如何将 Ajax 请求重定向到 Java 中的登录页面

How to redirect Ajax request to Login Page in Java

我想将 Ajax 请求重定向到服务器端的登录页面。

我可以通过

了解请求是否是Ajax请求
boolean isAjaxRequest = "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));

我知道我可以在 JavaScript 中完成,但有很多地方向服务器发送 ajax 请求。所以我必须在服务器端做。我试过了;

httpResponse.redirect("...");

但它不起作用。

我该怎么做?谢谢

简答:没有。

长答案:这是可能的,但不是你想的那样。如果需要重定向到登录页面,大概意味着用户当前未通过身份验证。发回 401 response - 这将向客户端表明需要登录。

现在的诀窍是不在每次调用中处理 401,而是在某个全局点处理它。例如,如果您使用 jQuery,您可以注册一个 global error handler 并检查状态代码 - 如果是 401,则重定向到登录页面或以其他方式接受身份验证数据。

你不能在服务器端这样做,因为无论你发送什么总是只是 AJAX 响应,而你想要重定向整个页面/浏览器选项卡(不仅仅是 AJAX 请求)到登录页面。

唯一的方法是在 AJAX 处理程序中在客户端执行此操作 - 发送一些标志(例如错误状态代码),然后在 Javascript 中处理以将整个浏览器选项卡重定向到登录页。

这会将 Ajax 请求重定向到登录页面:

response.sendRedirect("/login.jsp");