如何将 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");
我想将 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");