Resultful API的拦截(过滤器——Filter)
这里写目录标题
- 一、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)相关推荐
- Resultful API的拦截(拦截器——Interceptor)
目录 一.Resultful API的拦截三种方式 二.拦截器(Interceptor)的演示示例(springboot项目) 三.Interceptor拦截器特点 四.Filter过滤器.Inter ...
- 统一拦截--过滤器Filter
1.过滤器Filter 1. 概述 概念: Filter过滤器,是JavaWeb三大组件(Servlet.Filter.Listener)之一. 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功 ...
- 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别
一.前言 拦截器(Interceptor) 和 过滤器(Filter)的区别是面试中常问的问题,也是开发中容易被大家混淆的问题,在此总结下,希望对大家有所帮助. 二.Filter 介绍 2.1.概念 ...
- spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解
springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...
- Springmvc中的拦截器interceptor及与过滤器filter的区别
一.Springmvc中的拦截器概述及与过滤器filter的区别 1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术; 2).可以定义拦截 ...
- JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别
JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...
- SpringMVC→拦截器、SpringMVC拦截器实现、多个拦截器工作原理、拦截器使用场景、拦截器Interceptor与过滤器Filter区别
拦截器 拦截器实现 多个拦截器工作原理 拦截器使用场景 请求编码设置及请求登录Session校验 使用时间段设置 拦截器Interceptor与过滤器Filter区别
- Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...
- (十六)ATP应用测试平台——java应用中的过滤器Filter、拦截器Interceptor、参数解析器Resolver、Aop切面,你会了吗?
前言 过滤器Filter.拦截器Interceptor.参数解析器Resolver.Aop切面是我们应用开发中经常使用到的技术,到底该如何使用这些web附属功能, 本小节我们就分别介绍一下其各自的用法 ...
最新文章
- 环形熔断器设计与gobreaker源码分析
- 自适应滤波实例之系统辨识
- 四天学会Mybatis
- EMUI10还有哪些看点?分布式技术能力、开放与工具链...
- Oracle数据字典中查看约束信息/约束相关笔记
- mysql主库从库在同一台服务器_通过两种方式增加从库——不停止mysql服务
- (译)SDL.NET Surfaces 相关介绍
- 弹窗编辑jsp报表内数据
- 组态软件调用matlab,()基于OPC的组态软件和MATLAB的通信实现
- C# 控制台程序(Console Application )启动后隐藏
- SQL往表里添加字段
- 索尼NW-A55日版改中文
- Java--数组和集合之间的相互转换
- 计算机的系统更新速度,Windows 10更新后变慢了?5种方法解决Windows变慢问题
- DBeaver与excel
- 概率图模型--最大后验概率状态推理MAP
- Google搜索API?
- 实时显示当前时间(英文版)
- 茶觉 | 林先生的“岩香”
- 初学者都能看懂的MYSQL索引基础