这里写目录标题

  • 一、Resultful API的拦截三种方式
  • 二、过滤器(Filter)的演示示例(springboot项目)
  • 三、Filter过滤器特点
  • 四、Filter过滤器、Interceptor拦截器 、Aspect切面起作用的顺序
  • 五、当控制层(即Controller层)的方法抛异常时,Filter过滤器、Interceptor拦截器 、Aspect切面 抛异常的顺序

一、Resultful API的拦截三种方式

  • 过滤器(Filter)
  • 拦截器(Interceptor)
  • 切片(Aspect)

二、过滤器(Filter)的演示示例(springboot项目)

1、自定义一个名称为TimeFilter的过滤器,代码如下:

package com.xz.springsecuritydemo.filter;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import java.io.IOException;
import java.util.Date;@Component//添加该注解使过滤器启作用,如果不使用@Component注解需要写配置类,例lz写的WebConfig进行注册
public class TimeFilter implements Filter {//在控制器方法(即controller类中的方法)调用之前调用@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("Time Filter init");}//在控制器方法(即controller类中的方法)调用之后调用@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("Time Filter start");long startTime = new Date().getTime();chain.doFilter(request,response);long endTime = new Date().getTime();System.out.println("Filter耗时:"+(endTime-startTime));System.out.println("Time Filter end");}//在控制器方法(即controller类中的方法)调用之后调用@Overridepublic void destroy() {System.out.println("Time Filter destroy");}
}

2、自定义一个WebFilterConfig配置类,步骤1中如果不使用@Component注解,需要使用基于java的配置方式实现,代码如下:

package com.xz.springsecuritydemo.filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
@Configuration
public class WebFilterConfig {@Beanpublic FilterRegistrationBean timeFilter(){FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();filterRegistrationBean.setFilter(new TimeFilter());ArrayList<String> list = new ArrayList<>();list.add("/*");//过滤所有路径filterRegistrationBean.setUrlPatterns(list);return filterRegistrationBean;}
}

3、自定义一个控制类,代码如下

@RestController//表示此Controller提供RestAPI
public class SysQueryController {/*** @RequestMapping  映射http请求url到java方法* @RequestParam    映射请求参数到java方法的参数*/@RequestMapping(value = "/user1",method = RequestMethod.GET)public void query1(@RequestParam String username){System.out.println("query1====="+username);}}

4、测试步骤

  • 启动项目时会先输出自定义过滤器类TimeFilter的init方式的信息,如下图:

  • 再用postman测试工具发送请求,如下图:

  • 最后查看控制态输出信息,如下图:

    //输出内容
    Time Filter start
    query1=====xz
    Filter耗时:128
    Time Filter end
    

5、输出第4步的内容表示自定义的Filter过滤器成功。

三、Filter过滤器特点

  • 由上面的示例可知:Filter过滤器可以获取到原始的http请求和响应的信息,但是获取不到真正处理请求的方法信息。

四、Filter过滤器、Interceptor拦截器 、Aspect切面起作用的顺序

  • 先是Filter过滤器起作用
  • 然后Interceptor拦截器起作用
  • 然后Aspect切面起作用
  • 最后进入Controller方法中

五、当控制层(即Controller层)的方法抛异常时,Filter过滤器、Interceptor拦截器 、Aspect切面 抛异常的顺序

  • 先是Aspect切面
  • 如果使用@ControllerAdvice自定义异常,再进入这个处理异常类
  • 然后Interceptor拦截器
  • 然后Filter过滤器
  • 如果都没处理,最后到tomcat

Resultful API的拦截(过滤器——Filter)相关推荐

  1. Resultful API的拦截(拦截器——Interceptor)

    目录 一.Resultful API的拦截三种方式 二.拦截器(Interceptor)的演示示例(springboot项目) 三.Interceptor拦截器特点 四.Filter过滤器.Inter ...

  2. 统一拦截--过滤器Filter

    1.过滤器Filter 1. 概述 概念: Filter过滤器,是JavaWeb三大组件(Servlet.Filter.Listener)之一. 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功 ...

  3. 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别

    一.前言 拦截器(Interceptor) 和 过滤器(Filter)的区别是面试中常问的问题,也是开发中容易被大家混淆的问题,在此总结下,希望对大家有所帮助. 二.Filter 介绍 2.1.概念 ...

  4. spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解

    springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...

  5. Springmvc中的拦截器interceptor及与过滤器filter的区别

    一.Springmvc中的拦截器概述及与过滤器filter的区别 1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术; 2).可以定义拦截 ...

  6. JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

    JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...

  7. SpringMVC→拦截器、SpringMVC拦截器实现、多个拦截器工作原理、拦截器使用场景、拦截器Interceptor与过滤器Filter区别

    拦截器 拦截器实现 多个拦截器工作原理 拦截器使用场景 请求编码设置及请求登录Session校验 使用时间段设置 拦截器Interceptor与过滤器Filter区别

  8. Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系

    在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...

  9. (十六)ATP应用测试平台——java应用中的过滤器Filter、拦截器Interceptor、参数解析器Resolver、Aop切面,你会了吗?

    前言 过滤器Filter.拦截器Interceptor.参数解析器Resolver.Aop切面是我们应用开发中经常使用到的技术,到底该如何使用这些web附属功能, 本小节我们就分别介绍一下其各自的用法 ...

最新文章

  1. 环形熔断器设计与gobreaker源码分析
  2. 自适应滤波实例之系统辨识
  3. 四天学会Mybatis
  4. EMUI10还有哪些看点?分布式技术能力、开放与工具链...
  5. Oracle数据字典中查看约束信息/约束相关笔记
  6. mysql主库从库在同一台服务器_通过两种方式增加从库——不停止mysql服务
  7. (译)SDL.NET Surfaces 相关介绍
  8. 弹窗编辑jsp报表内数据
  9. 组态软件调用matlab,()基于OPC的组态软件和MATLAB的通信实现
  10. C# 控制台程序(Console Application )启动后隐藏
  11. SQL往表里添加字段
  12. 索尼NW-A55日版改中文
  13. Java--数组和集合之间的相互转换
  14. 计算机的系统更新速度,Windows 10更新后变慢了?5种方法解决Windows变慢问题
  15. DBeaver与excel
  16. 概率图模型--最大后验概率状态推理MAP
  17. Google搜索API?
  18. 实时显示当前时间(英文版)
  19. 茶觉 | 林先生的“岩香”
  20. 初学者都能看懂的MYSQL索引基础

热门文章

  1. 银行资管智能化转型迫在眉睫 金融壹账通赋能两大核心能力
  2. 偶然看到的一篇文章中的励志诗
  3. 一句话就能把你逗乐的经典笑话
  4. 图深度学习——复杂图嵌入:异质图,二分图,多维图,超图,符号图,动态图
  5. 33岁跳槽无路,走投无路之际受贵人指点,成功上岸阿里(Java岗)
  6. 计算机视觉技术学习路线(3D视觉)
  7. Python 从函数 def 到类 Class
  8. 【IDM+百度网盘助手】突破百度云下载限速,适用于谷歌浏览器【图文+附下载地址】
  9. 腾讯开发者登录不上去
  10. 22条经典心灵鸡汤集锦