文档章节

springboot拦截器

zheng875
 zheng875
发布于 2017/01/17 17:33
字数 775
阅读 103
收藏 7

springboot拦截器

拦截器

基于Java反射机制,不依赖与servlet容器,只能对action请求起作用,可以访问action上下文、值栈里的对象,在action的生命周期中可以多次被调用,可以获取IOC容器中的各个bean

过滤器

基于函数回调,依赖与servlet容器,可以对几乎所有的请求起作用,不能访问action上下文、值栈里的对象,只能在容器初始化时被调用一次,不能获取IOC容器中的各个bean。

springboot中实现拦截器比较简单:

1.创建我们自己的拦截器类并实现 HandlerInterceptor 接口

public class MyInterCeptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("在请求处理之前进行调用(Controller方法调用之前)");
        return true;// 只有返回true才会继续向下执行,返回false取消当前请求
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
    }
}

 

2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。

3.实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)。

@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 多个拦截器组成一个拦截器链,addPathPatterns 用于添加拦截规则,excludePathPatterns 用户排除拦截
        registry.addInterceptor(new MyInterCeptor1()).addPathPatterns("/**");
        registry.addInterceptor(new MyInterCeptor2()).addPathPatterns("/**");
    }
}

执行之后的顺序:

2017-01-17 17:28:15.683  INFO 6460 --- [nio-8088-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2017-01-17 17:28:15.697  INFO 6460 --- [nio-8088-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 14 ms
MyFilter2执行
MyFilter1执行
MyFilter3执行
11111在请求处理之前进行调用(Controller方法调用之前)
22222在请求处理之前进行调用(Controller方法调用之前)
Session 被创建
22222请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
11111请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
22222在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
11111在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)

根据输出可以了解拦截器链的执行顺序。

只有经过DispatcherServlet 的请求,才会走拦截器链,我们自定义的Servlet 请求是不会被拦截的,比如我们自定义的Servlet地址 http://localhost:8088/servlet1/1是不会被拦截器拦截的。并且不管是属于哪个Servlet 只要符合过滤器的过滤规则,过滤器都会拦截。

© 著作权归作者所有

zheng875
粉丝 11
博文 46
码字总数 22528
作品 0
无锡
程序员
私信 提问
springboot学习(二)——springmvc配置使用

以下内容,如有问题,烦请指出,谢谢 上一篇讲解了springboot的helloworld部分,这一篇开始讲解如何使用springboot进行实际的应用开发,基本上寻着spring应用的路子来讲,从springmvc以及web...

嘻哈开发者
2018/04/26
141
0
SpringBoot中的拦截机制

SpringBoot的拦截机制实现不是其特有的,它和Spring中一致,都可以使用下面三种技术来实现拦截机制 过滤器(Filter) 拦截器(Interceptor) 切片(Aspect) 过滤器拦截 过滤器是servlet中的...

Coding小聪
2018/04/06
0
0
SpringBoot自定义拦截器实现IP白名单功能

SpringBoot自定义拦截器实现IP白名单功能 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8993331.html   首先,相关功能已经上线了,且先让我先祷告一番:     阿门~ (--)   ...

€5è¬þxãÍ
2018/05/12
0
0
恒宇少年/spring-boot-chapter

简书整套文档以及源码解析 专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Cloud 核心技术 对Spring Cloud核心技术全面讲解 003 Quer...

恒宇少年
2018/04/19
0
0
Spring Boot学习笔记

多模块开发 [SpringBoot学习]-IDEA创建Gradle多Module结构的SpringBoot项目 RabbitMQ RabbitMQ 安装 linux安装RabbitMQ详细教程 Ubuntu 16.04 RabbitMq 安装与运行(安装篇) ubantu安装...

OSC_fly
2018/07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

DevOps是如何实现效率的提升?

随着企业业务对软件系统日益依赖,IT管理与研发模式也随之对“敏态”模式产生了需求,也就是今天时常提起的DevOps。提升效率,是DevOps实践的核心内容之一。就让我们来一起从软件生命周期的业...

嘉为科技
2分钟前
0
0
总结:linux目录之proc

我们系统大部分的基础数据采集,其实就是读取proc目录下的文件,并解析获取数据的过程。 1、如cpu利用率:直接cat /proc/cpuinfo命令,然后获取输出内容,并解析里面的数据,如cpu核数等; ...

浮躁的码农
4分钟前
1
0
比原Bapp红包应用

喜迎国庆期间,比原链在自己的移动端钱包Bycoin(下载地址)和google插件钱byone中推出了红包应用,在国庆期间深受大家好评。 那我们今天就来大概介绍一下比原红包,以及基于比原链开发dapp应用...

比原链Bytom
5分钟前
1
0
Linux中没有rc.local文件的解决方法

Linux中没有rc.local文件的解决方法是什么呢?这应该是很多工程师比较头疼的问题,下面就给大家例举几个解决办法。 比较新的Linux发行版已经没有rc.local文件了。因为已经将其服务化了。 解决...

xiangyunyan
5分钟前
0
0
数据中台在阿里巴巴集团内部的实践情况

作者:品鉴 数据中台门在阿里巴巴集团干什么的,由哪个部门掌管?数据中台在阿里巴巴的主要作用是什么呢?外面吹嘘这么神秘的数据中台在阿里实践的如何呢?今天小编正好要采访数据技术及产品...

阿里云官方博客
5分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部