Java 如果在会话超时后收到ajax调用,如何将用户重定向到登录屏幕
我有一个单页应用程序,使用Jquery编写,后端使用java 会话超时后,若用户执行了触发Ajax调用的某些活动,则应将用户重定向到登录屏幕。Java 如果在会话超时后收到ajax调用,如何将用户重定向到登录屏幕,java,jquery,session,servlets,browser,Java,Jquery,Session,Servlets,Browser,我有一个单页应用程序,使用Jquery编写,后端使用java 会话超时后,若用户执行了触发Ajax调用的某些活动,则应将用户重定向到登录屏幕。 若它是另一个页面请求,那个么下面的解决方案可能会起作用,但由于它是Ajax调用,重定向只会对success函数给出另一个响应 我试过了 主过滤器中 HttpSession session = request.getSession(false); if(session != null && !session.isNew()) { c
若它是另一个页面请求,那个么下面的解决方案可能会起作用,但由于它是Ajax调用,重定向只会对success函数给出另一个响应 我试过了
HttpSession session = request.getSession(false);
if(session != null && !session.isNew()) {
chain.doFilter(request, response);
}else {
response.sendRedirect("/login.jsp");
}
httpResponse.setHeader("Refresh", "0; URL=" + targetUrl);
你能做到的一个方法就是
if(response.status==403 | | 404或任何代码){
window.location=”http://your.login.page";
}
服务器端:在过滤器的doFilter方法中添加一个过滤器,该过滤器将针对每个请求进行处理。添加以下代码:
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession(false);// don't create if it doesn't exist
if(session == null || session.isNew()) {
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // status code is 401
}else{
// pass the request along the filter chain
chain.doFilter(request, response);
}
客户端:配置ajax,以便在收到状态代码为401的任何响应时,重新加载选项卡或更改window.location。以下是使用jquery的方法:
$(window).load(function(){
$.ajaxSetup({
statusCode: {
401: function(){
location.reload(); // or window.location="http://www.example.com"
}
}
});
});
对我来说,重新加载就足够了,可以让用户进入登录屏幕我之前也想到了这个解决方案,但在配置以捕获所有请求的响应、检查状态时遇到了问题。但幸运的是,在jquery中找到了ajaxSetup。谢谢你的帮助。添加了我的完整实现的解决方案。