ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基于过滤器进行重定向不成功的问题(Ajax只支持局部刷新)

2019-06-28 16:52:24  阅读:208  来源: 互联网

标签:Java 请求 win request ajax Ajax 过滤器 XMLHttpRequest response


我创建了一个过滤器,只要用户没有登陆就不能连接到主界面,但是在doFilter方法中用重定向在前端跳转页面不成功。

原因:由于我的登陆界面是基于ajax请求的,而ajax默认不支持重定向,他只能局部更新,所以我创建的过滤器跳转页面不成功

解决

一些请求路径:

1. request.getScheme() 返回当前链接使用的协议;
2. request.getServerName() 获取网站的域名;
3. request.getServerPort() 获取的服务器的请求端口;

4. request.getContextPath()获取当前的系统路径;

 

第一步、以我创建的LoginFilter为例,将LoginFilter的重定向response.sendRedirect("login.jsp");注释掉,改为一个方法进行判断ajax的跳转,方法如下

    private void requestDirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //获取当前请求的路径
        String basePath = request.getScheme() + "://" + request.getServerName() + ":"  + request.getServerPort()+request.getContextPath();
        //如果request.getHeader("X-Requested-With") 返回的是"XMLHttpRequest"说明就是ajax请求
        if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
          //前端需要判断是否是重定向          
          response.setHeader("SESSIONSTATUS", "TIMEOUT");
          response.setHeader("CONTEXTPATH",basePath+"/login.jsp");
           response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        }else{
            response.sendRedirect(basePath + "/login.jsp");
        }
}

 

第二步、在公共js中添加一段代码

//设置ajax请求完成后运行的函数,
$.ajaxSetup( {
    //设置ajax请求结束后的执行动作
    complete : 
    function(XMLHttpRequest, textStatus) {
        // 通过XMLHttpRequest取得响应头,sessionstatus
        var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
        if (sessionstatus == "TIMEOUT") {
            var win = window;
            while (win != win.top){
                win = win.top;
            }
          win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH"); } } });

最后运行成功。

 

我也只是一个小白,在网上参考了很多代码才成功出来的,有什么不足的地方还望指正,主要参考的博客有:

https://blog.csdn.net/u013997090/article/details/77338508

https://blog.csdn.net/webCows/article/details/78711326

 

  

 

标签:Java,请求,win,request,ajax,Ajax,过滤器,XMLHttpRequest,response
来源: https://www.cnblogs.com/77-xigua/p/11103491.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有