精华内容
下载资源
问答
  • ajax请求拦截器

    2013-03-15 16:50:42
    struts2在struts2.xml里配置拦截器可以过滤到指定的url的请求,但是对于ajax请求确是过滤不了,比如说sesion超时或某些页面有权限控制的,通过ajax请求时系统会报错最近在解决此类问题时碰上了找了不少资料,...
  • ajax请求拦截器无法跳转页面问题 今天在写项目的第一个登入功能的时候,按照以往对拦截器的操作进行实现,但是最终请求返回200,但是页面怎么也无法操作。重新复习了一遍拦截器之后发现操作并没有问题。 后来通过度...

    ajax请求拦截器无法跳转页面问题

    今天在写项目的第一个登入功能的时候,按照以往对拦截器的操作进行实现,最终请求返回200,但是页面怎么也无法跳转。重新复习了一遍拦截器之后发现操作并没有问题。
    后来通过度娘发现,前端用ajax请求的时候,后端通过拦截器是无法让页面进行跳转的,具体原因还没有搞懂。
    跟着度娘在拦截器中加入以下代码后发现页面终于可以跳转了。
    (功能:如果没有登入过则跳转到登入页面进行登入)

    拦截器的实现

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("拦截器执行了");
            HttpSession session = request.getSession();
            //获取当前请求的路径
            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"))){
                //告诉ajax我是重定向
                response.setHeader("REDIRECT", "REDIRECT");
                //告诉ajax我重定向的路径
                response.setHeader("CONTEXTPATH", basePath+"/templates/login.jsp");
                response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            }else{
                response.sendRedirect(basePath + "/templates/login.jsp");
            }
            return false;
        }
    

    前端代码添加

    $.ajaxSetup({
                complete : function(xhr, status) {
                    //拦截器实现超时跳转到登录页面
                    // 通过xhr取得响应头
                    var REDIRECT = xhr.getResponseHeader("REDIRECT");
                    //如果响应头中包含 REDIRECT 则说明是拦截器返回的
                    if (REDIRECT == "REDIRECT")
                    {
                        var win = window;
                        while (win != win.top)
                        {
                            win = win.top;
                        }
                        //重新跳转到 login.html
                        win.location.href = xhr.getResponseHeader("CONTEXTPATH");
                    }
                }
            });
    

    这段代码的含义,大抵就是,在 ajax请求完成以后,执行 complete 回调方法,里面进行一些逻辑的判断;
    如果响应头中包含 REDIRECT 则说明是拦截器返回的,则进行跳转,CONTEXTPATH 的值,由后台定义;

    总结

    如果前端通过ajax发送请求,后端拦截器需要对页面进行跳转的话,需要通知ajax。在返回的响应头中需要写入相应的数据,前端获得数据后需要进行判断才能进行跳转。

    代码应该差不多就是这样,但是具体原理还并不了解。

    展开全文
  • if(session.getAttribute(FwConstant.SESSION_USERINFO) == null) {if("XMLHttpRequest".equals(requestedWith)){ System.out.println("请求拦截,跳转到登录页面");//控制台提示用 JSONObject res = newJSONObject...

    package com.yb.fw.app.interceptor;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.http.HttpSession;

    import org.springframework.stereotype.Component;

    import org.springframework.web.servlet.HandlerInterceptor;

    import org.springframework.web.servlet.ModelAndView;

    import com.alibaba.fastjson.JSONObject;

    import com.yb.fw.core.helper.FwConstant;

    @Componentpublic classFrontAuthorityInterceptor implements HandlerInterceptor {publicboolean preHandle(HttpServletRequest request, HttpServletResponse response,

    Object handler) throws Exception {

    String url=request.getRequestURI();

    String requestedWith=request.getHeader("X-Requested-With");if(url.indexOf("/store/login.do")>=0) {return true;

    }else if(url.indexOf("/store/land.do")>=0) {return true;

    }

    HttpSession session=request.getSession();if(session.getAttribute(FwConstant.SESSION_USERINFO) == null) {if("XMLHttpRequest".equals(requestedWith)){

    System.out.println("请求被拦截,跳转到登录页面");//控制台提示用

    JSONObject res = newJSONObject();

    res.put("message","IsAjax");

    response.getWriter().append(res.toString());

    }else{

    response.sendRedirect(request.getContextPath()+"/people/toLogin.do");

    }return false;

    }else return true;

    }

    @Overridepublic voidpostHandle(HttpServletRequest request, HttpServletResponse response,

    Object handler, ModelAndView mv) throws Exception {

    }

    @Overridepublic voidafterCompletion(HttpServletRequest request,

    HttpServletResponse response, Object handler, Exception exception)

    throws Exception {

    }

    }

    展开全文
  • ajax 异步请求拦截器过滤器中使用 重定向 页面响应无效我这里用的是springboot框架,用拦截器实现 对请求的拦截 ,session超时直接跳转到login.html页面。后台代码:@Override public void addInterceptors...

    在ajax 异步请求下 拦截器过滤器中使用 重定向 页面响应无效

    我这里用的是springboot框架,用拦截器实现 对请求的拦截 ,session超时直接跳转到login.html页面。

    后台代码:

    @Override
        public void addInterceptors(InterceptorRegistry registry)
        {
        //加载自定义拦截器(登录请求和退出请求放行)
            registry.addInterceptor(new DemoIntercept()).addPathPatterns("/**").excludePathPatterns("/loginController","/logout");
        }
    
    
    /**
    *自定义拦截器
    **/
    public class DemoIntercept implements HandlerInterceptor
    {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3)
                throws Exception
        {
            logger.info("afterCompletion:{}", request.getRequestURI());
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
                throws Exception
        {
            logger.info("postHandle:{}", request.getRequestURI());
        }
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception
        {
            //获取session
            HttpSession session = request.getSession();
            Object username = session.getAttribute("username");
            //用户如果为null 则 重定向到 login页面 ,否则放行
            if(null == username)
            {
                //重定向到login.html
                 redirect(request, response); 
                 return false;
            }
            return true;
        }
    
    
          //对于请求是ajax请求重定向问题的处理方法
        public void redirect(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"))){
                //告诉ajax我是重定向
                response.setHeader("REDIRECT", "REDIRECT");
                //告诉ajax我重定向的路径
                response.setHeader("CONTENTPATH", basePath+"/login.html");
                response.setStatus(HttpServletResponse.SC_FORBIDDEN);
            }else{
                response.sendRedirect(basePath + "/login.html");
            }
        }
    }
    

    前台代码

    //这里给所有ajax请求添加一个complete函数
    $.ajaxSetup({
                complete : function(xhr, status) {
                    //拦截器实现超时跳转到登录页面
                    // 通过xhr取得响应头
                    var REDIRECT = xhr.getResponseHeader("REDIRECT");
                    //如果响应头中包含 REDIRECT 则说明是拦截器返回的
                    if (REDIRECT == "REDIRECT")
                    {
                        var win = window;
                        while (win != win.top)
                        {
                            win = win.top;
                        }
                        //重新跳转到 login.html 
                        win.location.href = xhr.getResponseHeader("CONTEXTPATH");
                    }
                }
            });

    这里实现的原理也就是,后台在ajax请求头上打上标记 (REDIRECT ),标记(REDIRECT )这个请求要重定向,而前台接受到响应后 根据标记(REDIRECT )判断这个响应头是否需要 重定向 如果需要则 则获取重定向地址 就可以了

    展开全文
  • 解决拦截器ajax请求的的拦截拦截器配置:public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception { //获取判定登陆的session是否存在 String token = ...

    解决拦截器对ajax请求的的拦截

    拦截器配置:public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception { //获取判定登陆的session是否存在 String token = (String) request.getSession().getAttribute("token"); String postId = (String) request.getSession().getAttribute("postId"); if(token == null || token == ""){ String XRequested =request.getHeader("X-Requested-With"); if("XMLHttpRequest".equals(XRequested)){ response.getWriter().write("IsAjax"); }else{ response.sendRedirect("/m-web/user/toLogin"); } return false; } if(postId == null || postId == ""){ String XRequested =request.getHeader("X-Requested-With"); if("XMLHttpRequest".equals(XRequested)){ response.getWriter().write("IsAjax"); }else{ response.sendRedirect("/m-web/user/toLogin"); } return false; } return true; }

    1、判断 String XRequested =request.getHeader("X-Requested-With") 的值,目的是判断是否是ajax请求。

    2、response.getWriter().write("IsAjax");写出一个响应的数据给ajax,这样就可以在ajax里面做判断

    判断的方式存在两种方式:

    1)直接在ajax里面做判断(不建议)success:function(data){ if(data == "IsAjax"){ window.location.href="m-web/user/toLogin" return; }}

    2)改ajax源码然后在做压缩,是针对全局的方式来修改的(建议)if ( isSuccess ) {// if no content if ( status === 204 || s.type === "HEAD" ) { statusText = "nocontent"; // if not modified } else if ( status === 304 ) { statusText = "notmodified"; // If we have data, let's convert it } else { statusText = response.state; success = response.data; error = response.error; isSuccess = !error; //解决ajax拦截问题 var result = responses.text; if(result.indexOf("IsAjax")>=0){ window.location.href="m-web/user/toLogin"; return; } } }

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    更多解决拦截器对ajax请求的拦截实例详解相关文章请关注龙方网络!

    相关文章:

    通过JS 拦截全局ajax请求实例解析

    Node.js服务器环境下使用Mock.js拦截AJAX请求的教程

    通过php检查是否是ajax请求的方法

    展开全文
  • 它可以拦截后台的数据,对其进不事时功来这制请例在屏随会和时实于幻近支前我能又些求如浏蔽机和滚兼现的灯近支前我能又些求如浏蔽机和滚兼现的灯近支前我能又些求如浏蔽机和滚兼现的灯近支前我能又些求如浏...
  • if(session.getAttribute(FwConstant.SESSION_USERINFO) == null) {if("XMLHttpRequest".equals(requestedWith)){ System.out.println("请求拦截,跳转到登录页面");//控制台提示用 JSONObject res = newJSONObject...
  • 主要介绍了解决拦截器ajax请求的拦截实例详解的相关资料,需要的朋友可以参考下
  • 自定义方式本地数据缓存 1.1 自定义缓存 1 沙盒路径下的 Library/Caches 用来存放缓存文件,保存从网络下载的请求数据,后续仍然需要继续使用的文件,例如网络下载的离线数据,图片,视 ... nexus3添加第三方jar 最近在看...
  • Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求 Java过滤器处理Ajax请求,Java拦截器处理Ajax请求拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 ...
  • 解决拦截器ajax请求的的拦截拦截器配置://获取判定登陆的session是否存在String token = (String) request.getSession().getAttribute("token");String postId = (String) request.getSession().getAttribute(...
  • SSM拦截器拦截ajax请求

    千次阅读 2018-06-11 22:50:45
    拦截器拦截请求可以分ajax请求/非ajax请求. ajax请求在用户session过期之后,需要跳转到登录页面. 这个时候就需要在拦截器里判断我们的请求是否是ajax请求. 但是不能直接的跳转页面,只能通用response返回响应. ...
  • 我想要在页面的所有ajax请求发出去之前和数据返回到页面上之前做一次拦截, 在发出去之前对请求参数做处理再发送,数据回来后对返回数据做处理再返回。 我用XMLHttpRequest谢了一段js代码做拦截,在发出去之前都没有...
  • 项目使用HTML页面,所以多数请求都是使用的ajax,拦截器主要是验证用户的token,一旦token失效就跳转到登录页面,但是发现中间的ajax请求不能完成想要的跳转,于是借助度娘,现将实现的方法总结如下,已被后用。...
  • ajax跨域cors请求拦截器

    千次阅读 2017-12-20 16:37:12
    * @Description: ajax跨域cors请求拦截器 * @author boat * @date 2015年11月6日 上午11:30:36 * @version V1.0 */ public class CorsInterceptor implements HandlerInterceptor { @Override public ...
  • 本文转自:Shiro 教程,Ajax请求拦截跳转页面方案 我们知道Ajax不能做页面redirect和forward跳转,所以Ajax请求假如没登录,那么这个请求给用户的感觉就是没有任何反应,而用户又不知道用户已经退出或是  ...
  • 针对ajax请求拦截器不跳转问题

    千次阅读 2019-05-08 10:15:28
    最后发现用ajax请求的地址在处理后拦截器并不拦截此请求,也不会进行跳转(ps:当然不会跳转了),这让我一直感觉我的拦截器地址配置写错了,进行一番查阅后,这里对这个问题进行了一些梳理 解释 aja...
  • springmvc拦截器拦截ajax请求

    千次阅读 2017-12-08 09:35:05
    拦截普通的请求,不需要特殊的处理,但是拦截ajax请求时,则需要处理,   1、首先写一个js,用与复写ajax请求,如果是ajax请求,给其加一个标志,标注释ajax请求 $(function() { overrideJQeuryAjax(); }); ...
  • Java过滤器处理Ajax请求,Java拦截器处理Ajax请求拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ©Copyright 蕃薯耀 2017年8月10日 ...
  • 在实现了一个用户登录的拦截器后,判断session中是否存在用户的id,如果没有就跳转到登录界面,如果有就放行,发现这样对ajax请求没有作用,那么如何对ajax请求拦截后进行页面跳转呢?首先判断是否是ajax请求,如果...
  • 拦截ajax请求 内容精选换一换防护网站接入WAF后,您可以通过配置黑白名单规则或精准访问防护规则,使WAF仅允许指定IP访问防护网站,即WAF拦截除指定IP外的所有来源IP。例如,如果您需要放行192.168.2.3,添加一条如...
  • springmvc 拦截器区分ajax请求

    千次阅读 2015-08-19 14:03:20
    springmvc、拦截器ajax
  • 开发时一个简单的功能,单点登录验证用户是否登陆,没有登录的情况下跳转到登录页,但是在实际的调试中发现我的拦截跳转一直没起作用,经过百度发现原来是ajax请求下跳转失效了。于是又经过百度怎么解决,最终整理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,700
精华内容 11,880
关键字:

ajax请求拦截器