精华内容
下载资源
问答
  • 什么是拦截器 在前端发来请求的时候,有时候需要拦截掉它的请求,不让他访问后端的请求处理器,举个简单的例子: 有人想不登录直接输入url地址访问网站的Main页面,此时我们就需要用拦截器对这样的请求进行拦截,不...

    什么是拦截器

    在前端发来请求的时候,有时候需要拦截掉它的请求,不让他访问后端的请求处理器,举个简单的例子:
    有人想不登录直接输入url地址访问网站的Main页面,此时我们就需要用拦截器对这样的请求进行拦截,不让他执行Controller中的 "/Main"对应的方法,这就可以用拦截器来实现。springMVC中集成了拦截器的实现。

    使用步骤

    1. 创建一个拦截器:只需要自己写一个拦截器的类,然后实现HandlerInterceptor接口中的方法,这个接口只有三个方法,分别对应①处理请求前,②处理请求时,③处理请求后;常用的也就只有一个,就是处理请求前,所以只要根据实际需要来实现这个方法即可。
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyIntercept implements HandlerInterceptor {
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
            if(request.getRequestURI().contains("Login")){
                return true;
            }
            if(request.getSession().getAttribute("userName")==null){
             System.out.println(request.getSession().getAttribute("userName")+request.getRequestURI());
             //request.getRequestDispatcher("WEB-INF/Login.jsp").forward(request,response);
             response.sendRedirect("/Login");
             return false;
         }
            return  true;
        }
    }
    
    1. 在spring配置文件中将拦截器绑定需要拦截的请求:(注意引入mvc的约束名)
      <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/**/"/>
                <bean id="myIntercept" class="MyIntercept"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
    

    登陆注销的例子

    1. 写一个登陆页:
      在这里插入图片描述

    2. 写一个主页:
      在这里插入图片描述

    3. 后端请求:
      在这里插入图片描述

    4. 结果验证:
      ①不登录直接访问Main:会重定向到登陆页(说明拦截器生效了)

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619211028519.png
    在这里插入图片描述

    ②输入账号密码进入主页:
    在这里插入图片描述
    ③不关浏览器,关掉当前页面,再重新输入地址同样可以进入;(说明session在仅关闭当前页面的时候是不会注销的)

    ④点击注销,再尝试直接进入Main页面,会被重定向到Login页;(说明session中的用户信息被移除了)

    展开全文
  • 一、拦截器Interceptor的使用 1.首先肯定需要实现拦截器,也就是继承HandlerInterceptorAdapter类或者实现HandlerInterceptor接口,重写preHandle,postHandle,afterCompletion方法,只有preHandle返回true时才能...

    一、拦截器Interceptor的使用

    1.首先肯定需要实现拦截器,也就是继承HandlerInterceptorAdapter类或者实现HandlerInterceptor接口,重写preHandle,postHandle,afterCompletion方法,只有preHandle返回true时才能执行后续流程
    2.然后使用拦截器,要将实现的拦截器注册到Spring容器中,自己写一个配置类,实现WebMvcConfigurer接口,重写addInterceptors(InterceptorRegistry registry)方法,需要在类上加@Configuration或@Component注解

    二、过滤器Filter的使用

    1.实现Filter接口,重写init,doFilter,destroy方法,使用@WebFilter注解,在启动类加上@ServletComponentScan(basePackages=“过滤器所在包名”)
    在服务器启动时就会初始化init

    本类容并不详细,主要用于面试时能不能口头表达出来以上类容

    展开全文
  • 如果在调用某个接口前,需要进行一些前置操作比如鉴权,一般会使用拦截器来实现 一.根据具体业务创建一个拦截器类WebInterceptor,写上对应的业务逻辑: import org.springframework.stereotype.Component; import ...

    如果在调用某个接口前,需要进行一些前置操作比如鉴权,一般会使用拦截器来实现

    一.根据具体业务创建一个拦截器类WebInterceptor,写上对应的业务逻辑:

    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @Component
    public class WebInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("执行拦截器鉴权"+request.getRequestURI());
            return true;
        }
    }
    

    这里只重写了HandlerInterceptor类的preHandle()方法,用来测试,代表如果注册了这个拦截器,那么在执行请求接口方法逻辑前会先执行该preHandle()方法里的逻辑,同时如果该方法的返回值是true,才会继续执行请求接口的业务逻辑,而返回false则相反。

    二.写一个配置类,把我们写的拦截器注册下

    import com.example.springboot.interceptor.WebInterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    @Configuration
    public class WebConfig extends WebMvcConfigurationSupport {
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            WebInterceptor webInterceptor = new WebInterceptor();
            registry.addInterceptor(webInterceptor);
    
        }
    }
    

    这里表示对所有的请求都执行拦截

    写两个接口用来测试,接口具体实现省略:
    在这里插入图片描述

    测试下结果,访问http://localhost:8080/pay/1:
    在这里插入图片描述
    在这里插入图片描述

    可以看到控制台输出了拦截器的逻辑,代表请求先被拦截,后才执行

    访问http://localhost:8080/get/1:
    在这里插入图片描述
    在这里插入图片描述
    可以看到控制台输出了拦截器的逻辑,代表请求先被拦截,后才执行

    那么怎么对特定的接口路径做拦截,其余放行呢:

    @Configuration
    public class WebConfig extends WebMvcConfigurationSupport {
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            WebInterceptor webInterceptor = new WebInterceptor();
            registry.addInterceptor(webInterceptor)
            .addPathPatterns("/pay/**");//表示该拦截器只对"/pay"开头的路径做拦截,/**代表多级,/*代表一级
    
        }
    }
    

    测试后会发现,只有/pay接口有拦截器的逻辑输出,/get的接口没有被拦截器拦截

    那么怎么对特定的接口路径不做拦截呢:

    @Configuration
    public class WebConfig extends WebMvcConfigurationSupport {
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            WebInterceptor webInterceptor = new WebInterceptor();
            registry.addInterceptor(webInterceptor)
            .excludePathPatterns("/get/**");//表示该拦截器不对"/get"开头的路径做拦截,/**代表多级,/*代表一级
    
        }
    }
    

    测试后会发现,只有/pay接口有拦截器的逻辑输出,/get的接口没有被拦截器拦截

    展开全文
  • 拦截器使用

    2018-11-15 12:21:00
    在这里我创建了两个拦截器,方便区分。...虽然我们创建了两个拦截器类,但是我们又怎么知道这是拦截器呢, 这时我们就需要继承拦截器的接口,接口中有三个方法。 请看下图 通常我用拦截器做登录拦截,...

     

    在这里我创建了两个拦截器,方便区分。

    我们首先要在配置文件中配置:

     

     /**是指所有文件中及其里面的子文件夹

    /*是所有文件夹

    / 是web项目的根目录

     

     

    然后创建拦截器

     

    虽然我们创建了两个拦截器类,但是我们又怎么知道这是拦截器呢,

    这时我们就需要继承拦截器的接口,接口中有三个方法。  请看下图

     

    通常我用拦截器做登录拦截,我们就在返回值是boolean的方法中,进行登录拦截。

     

     

    我们再来看一下返回值,true和flase。

     

     

     我们可以这句做一些简单的判断,如果用户登录了就放行,如果没登录就进行拦截,跳到登陆界面。

     

    我们可以在配置文件中设置拦截指定路由:

     

    也可以设置不拦截指定路由(拦截全部,不拦截edit.do):

    在浏览器中输入下面,则无法访问,因为被拦截了 http://localhost:8080/items/list.do

    但访问下面则会成功,因为排除拦截了 http://localhost:8080/items/edit.do

     

     

    这里就是一个简单的登录拦截:

     

    转载于:https://www.cnblogs.com/buwang/p/9962797.html

    展开全文
  • 拦截器下的swagger应该怎么使用

    千次阅读 2018-05-24 17:42:57
    拦截器下的swagger无法使用,是因为拦截器拦截了swagger的路径。如图:把鼠标放到上面会显示路径,要把这些会拦截的路径忽略,swagger就能正常使用
  • 拦截器咋个使用

    2017-11-27 00:28:28
    咋个:在云南方言是怎么的意思,标题的意思就是“拦截器怎么使用?” 太多的概念我们在这里就不细讲,主要讲一讲怎么使用,给大家讲一个舍友Mic的故事: Mic是我的一个大学舍友,刚上大学的时候 相中了隔壁班的一个...
  • 在客户端将请求发送到服务器端之前,拦截这些请求;在服务器端的响应返回给客户端之前,处理这些响应。 比如字符编码过滤CharacterEncodingFilter,就是设置request和response中的字符编码方式。 过滤的实现 ...
  • SpringMVC拦截器使用

    千次阅读 2017-04-25 20:22:44
    SpringMVC拦截器是什么...怎么写一个SpringMVC拦截器当一个类实现HandlerInterceptor接口,它就是一个符合拦截器规范的一个拦截器。实现代码public class Interceptor01 implements HandlerInterceptor{ @Overr
  • 拦截器拦截请求,主要在权限登录的使用,那么SpringMvc的拦截器应该怎么使用呢 Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。但它俩是不一样的,在我以前的...
  • axios拦截器使用 前言:文档有很多接口,除了登录接口不需要授权访问,其他接口必须授权才能调用,怎么授权呢(调用登录接口的时候,服务器端会返回一个登录成功的token令牌,这个token就是权限认证的字段,在请用...
  • ![图片说明](https://img-ask.csdn.net/upload/201904/16/1555406906_162714.png)![图片说明]... 有大神指导怎么拦截器中获取controller的返回的数据集吗? 求解 使用的是HandlerInterceptor拦截器
  • 我们在使用 Axios 的过程中,或多或少地要用到它的拦截器,可是axios 的拦截器怎么使用,内部又是怎么实现的? 我们在使用 Axios 的过程中,或多或少地要用到它的拦截器,例如要实现: 数据转换; 添加...
  • 使用axios拦截器模拟mock服务 为什么自己弄个mock?还不是前后端联调过程,后端动不动就重启服务,接口没数据,界面没效果,真的烦。怎么不搞开发环境?我也想啊,就是不搭,诶,无奈!! axios拦截器是什么呢?是在...
  • 在ssm框架搭建的web项目中,想在每次操作数据库之前(增、改、删),把原来的数据和操作之后的数据保存。...例如:数据库有一条记录id:1,name:tom,把其修改为id:1,name:jack,怎么通过拦截器的方式拿到这两条数据?
  • 啊最近由于逃课次数有点多,去上了计算机网络,挺同意老师说的一句话的:“不要只学框架的api,要学习框架的设计,要去想为什么struts有拦截器这种东西,它怎么实现的.....”。然而我并不打算在web开发上多费时间,...
  • 拦截器在工作中依旧还是很常见的,token的认证,权限的认证,部分请求的拦截,都会用到拦截器。前些天公司中需要挂一个拦截的功能上去,突然一下忘了怎么操作的了,各种查资料百度才搞定,这里总结一下。大体上就...
  • vue中使用interceptors拦截器设置了请求头token,但是token的位置总是在路径的前面,这个怎么处理。
  • 起因是本人在写一个拦截器的时候想通过Autowired注入实现查询数据库信息,但是不管怎么查都是空的,原因是拦截器加载的时间点在springcontext之前,所以需要在配置文件中使用@Bean注解提前去加载。 拦截器案例 ...
  • 因为服务器连的是本地服务器,然后需求就是要有网络但是服务器是关闭的情况下使用缓存的数据, 服务器关闭时在拦截器里获取code还是200,找不到可以判断的条件。</p>
  • 拦截器

    2020-07-22 00:21:25
    程序设计者设计拦截器供开发者使用,开发者只需要知道拦截器接口的方法、含义和作用即可,无需知道动态代理是怎么实现的。 拦截器接口Interceptor package com.lucas; import java.lang.reflect.Method; public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 567
精华内容 226
关键字:

拦截器怎么使用