Java Web之路一:过滤器(Filter)
一、过滤器(Filter)简介
public interface Filter {
/**过滤器的初始化时被调用*/
public void init(FilterConfig filterConfig) throws ServletException;
/**执行过滤器处理逻辑*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
/**销毁过滤器时被调用*/
public void destroy();
}
其中init方法是在Filter初始化时会被调用、destroy方法是Filter被销毁时调用,而doFilter方法是过滤器的工作时执行的方法,doFilter至少需要保护两块逻辑,一个是当前过滤器需要处理的过滤逻辑,一个是跳转到下一个过滤器中。
如下自定义的过滤器:
public class LogFilter implements Filter {
/**初始化过滤器时调用*/
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化过滤器");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("执行过滤器逻辑");
//跳转到过滤器链路到下一个链路
chain.doFilter(request, response);
}
public void destroy() {
System.out.println("销毁过滤器");
}
}
@Bean
public FilterRegistrationBean initLogFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
LogFilter filter = new LogFilter();
bean.setFilter(filter);
//需要过滤的URL路径
List<String> urls = new ArrayList<String>();
urls.add("/manage/*");//只过滤 /manage/*的路径
bean.setUrlPatterns(urls);
return bean;
} @Bean
public FilterRegistrationBean initTimeFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
TimeFilter filter = new TimeFilter();
bean.setFilter(filter);
//需要过滤的URL路径
List<String> urls = new ArrayList<String>();
urls.add("/*");//过滤所有路径
bean.setUrlPatterns(urls);
return bean;
}
@WebFilter(urlPatterns = "/*")
@Order(1)
public class LogFilter implements Filter { //............... }
@WebFilter(urlPatterns = "/manage/*")
@Order(2)
public class TimeFilter implements Filter { //...... }
@SpringBootApplication
@ServletComponentScan
public class Bootstrap
{
public static void main( String[] args )
{
SpringApplication.run(Bootstrap.class);
}
}
三、Filter的实现原理
Filter和Servlet一样都是通过Web容器实现的,Web容器分别存了Servlet和Filter的两个Map,key是对应配置的路径url-parttern,value分别就是Servlet和Filter的实例
在web容器启动时就会初始化所有的Filter,并且将所有的Filter存入Map中,每次当有客户端请求来时,web容器都会先获取请求的url,然后遍历所有的Filter,如果Filter满足URL的条件,就将Filter加入到过滤器数组中。
然后将过滤器数组中的所有过滤器组成过滤器链,挨个执行过滤器的逻辑。
Java Web之路一:过滤器(Filter)的更多相关文章
- [原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java Web三大组件之过滤器(Filter)
什么是过滤器?有什么用? 过滤器JavaWeb三大组件之一,它与Servlet很相似.不过滤器是用来拦截请求的,而不是处理请求的.过滤,顾名思义,就是留下我们想要的,丢掉我们不需要的.例如:某个网站的 ...
- java web学习总结(十七) -------------------过滤器
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- JAVA Web项目的编码过滤器
首先写一个EncodeFilter的过滤类: package com.djtu.wy.common; import java.io.IOException;import javax.servlet.F ...
- JAVA WEB 解决编码问题的filter
最近使用Springmvc,GET传输参数的时候,经常出错误,下面介绍添加一个Filter的方法,可以解决这个问题.既支持POST方式也支持GET方式. 首先写一个Filter package com ...
- 我的java web之路(配置开发环境)
这个学期学习java web开发,当然不能只靠上机的时间来练习,于是,便在自己的电脑上安装一系列的软件... 1.JDK的安装.首先,下载Java JDK,可以到sun公司网站下载.一定要下载适合自己 ...
- java web.xml listener servlet 和filter加载顺序
在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...
- java web 拦截器、过滤器理解
1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加 ...
- JAVA WEB项目中开启流量控制Filter
Flow Control:控流的概念 主要是用来限定server所能承载的最大(高并发)流量峰值,以免在峰值是Server过载而宕机,对于WEB系统而言 通常是分布式部署,如果请求并发量很大,会导致整 ...
随机推荐
- 异常:由 spring-session pom 引发
错误异常 Correct the classpath of your application so that it contains a single, compatible version of o ...
- python笔记 函数初识
1. 函数: 封装一个功能 def my_len(形参): -> def 声明定义一个函数 my_len 函数名命名规则同变量 ······ - ...
- 算法竞赛进阶指南--在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继)
while (l < r) { int mid = (l + r) / 2; if (a[mid] >= x) r = mid; else l = mid + 1; }
- MySQL 索引、视图
1.索引 什么是索引 一个索引是存储在表中的数据结构,索引在表的列名上创建.索引中包含了一个列的值,这些值保存在一个数据结构中 索引优缺点 索引大大提高了查询速度 会降低更新表的速度,如对表进行INS ...
- App 抓包代理设置
1.设置 Fiddler 打开 Fiddler,Tools --> Fiddler Options --> HTPS (配置完后记得要重启 Fiddler) 选中 "D ...
- MySQL导出数据到文件中的方法
MySQL导出数据到文件中的方法 1.导出数据到txt文件中实例:把数据表studscoreinfo中所有数据导出到指定的位置方法:select * from 表名 into outfile 指定导出 ...
- T - zxa and leaf HDU - 5682 二分+dfs
T - zxa and leaf HDU - 5682 题目大意是:给你一颗树,这棵树有些节点已经设置了它的美丽值,然后剩下一些节点需要我们设置美丽值. 一条边的丑陋程度等于被定义为由这个边缘连接的两 ...
- CC2530外部中断
一.中断基础概念 内核与外设之间的主要交互方式有两种:轮询和中断.中断系统使得内核具备了应对突发事件的能力. 在执行CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转 ...
- LeetCode--Array--Remove Element && Search Insert Position(Easy)
27. Remove Element (Easy)# 2019.7.7 Given an array nums and a value val, remove all instances of tha ...
- Day_09【常用API】扩展案例7_验证QQ号是否正确
需求说明 请用户输入一个"QQ号码",我们来判断这个QQ号码是否正确 要求:使用方法来完成判断功能 验证规则: 1)必须是5-12位数字: 2)首位不能是0: package co ...