Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果在会话超时后收到ajax调用,如何将用户重定向到登录屏幕_Java_Jquery_Session_Servlets_Browser - Fatal编程技术网

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

我有一个单页应用程序,使用Jquery编写,后端使用java

会话超时后,若用户执行了触发Ajax调用的某些活动,则应将用户重定向到登录屏幕。
若它是另一个页面请求,那个么下面的解决方案可能会起作用,但由于它是Ajax调用,重定向只会对success函数给出另一个响应

我试过了

  • 主过滤器中

    HttpSession session = request.getSession(false);
    if(session != null && !session.isNew()) {
        chain.doFilter(request, response);
    }else {
        response.sendRedirect("/login.jsp");
    }
    
  • 通过在ajax调用中从主过滤器内部发送标题下方来刷新选项卡

    httpResponse.setHeader("Refresh", "0; URL=" + targetUrl);
    

  • 你能做到的一个方法就是

  • 拥有用于执行ajax调用的通用代码
  • 从那里调用后端
  • 有逻辑设置

    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。谢谢你的帮助。添加了我的完整实现的解决方案。