请叫我七点起床 2017-02-23 03:11 采纳率: 0%
浏览 5418
已采纳

java重定向问题,重定向失败

简单拦截器代码:

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object arg2) throws Exception {
        //获取用户请求url
        if(request.getRequestURI().endsWith("/login")){
            return true;
        }else{
            if(request.getSession().getAttribute("username")==null){
                response.sendRedirect(request.getRequestURL().substring(0, request.getRequestURL().indexOf(request.getContextPath()))+request.getContextPath());
                return false;
            }else{
                return true;                
            }
        }
    }

用户登录进去后,服务突然断掉。之后启动服务,用户点击操作按钮,断点调试可以走到response.sendRedirect(...)这里,但是重定向后,页面并没有进行调整到登录页面。
图片说明

  • 写回答

2条回答 默认 最新

  • 请叫我七点起床 2017-02-23 09:55
    关注

    问题已经解决了。倒腾一下午
    如果服务中途停止,用户访问非ajax请求的地址,是可以跳转到登录界面的。但是ajax请求地址,就会无法调整,导致页面不动。解决办法就是稍微改动一下拦截器,代码如下:

        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                Object arg2) throws Exception {
            //获取用户请求url
            if(request.getRequestURI().endsWith("/login")){
                return true;
            }else{
                if(request.getSession().getAttribute("username")==null){
                    if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){//判断是否为ajax请求
                        PrintWriter out = response.getWriter();//如果是ajax请求,返回一个标识,告诉ajax请求无效,需要重新登录
                        out.print("login");
                        return false;
                    }
                    response.sendRedirect(request.getRequestURL().substring(0, request.getRequestURL().indexOf(request.getContextPath()))+request.getContextPath());
                    return false;
                }else{
                    return true;                
                }
            }
        }
    

    前天jsp页面,需要这样处理:

      $.ajax({
                           type: "POST",
                           url: .后台地址,
                           success: function(msg){
                             if("login"==msg){
                                window.location.href="${ctx}/";
                             };                  
                            //.....
                        }); 
    

    同时为了防止登录页面无法显示全屏,需要在登录jsp页面加如下代码:

      //防止iframe嵌套
          if(top.location != self.location){
            top.location=self.location;
          };
    

    现在问题已经解决了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?