过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,
常用的场景有登录校验、权限控制、敏感词过滤等,下面介绍下Spring Boot配置过滤器的方式

过滤器执行流程

客户端发起请求的时候,首先是经过了Filter过滤器,处理了request请求,然后去执行了我们的servlet/jsp,当执行完毕后,我们的response响应也经过了过滤器,这里经过过滤器的时候是从放行后面开始执行的,也就是处理了response响应。

过滤器的应用:字符编码转换,敏感词过滤、登陆权限验证、资源访问权限等;

拦截器与过滤器使用场景:(场景类似)

spring Web MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。

2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;

3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);

4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。

过滤器和拦截器执行顺序

先执行过滤器,之后拦截器

一.创建自定义过滤器实现Filter接口

@Component
public class MyFilter implements Filter {//日志private Logger logger= LoggerFactory.getLogger(getClass());@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("MyFilter.init");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {logger.info("过滤器---------start---------------");/*  if(request.getParameter("name").equals("张三")){//放行filterChain.doFilter(request,response);  //如果==张三,下面这段是放行的意思----反之不放行}*///走这个方法代表放行filterChain.doFilter(request,response);logger.info("过滤器---------end---------------");}@Overridepublic void destroy() {System.out.println("MyFilter.destroy");}
}
//走这个方法代表放行filterChain.doFilter(request,response);

二.注册过虑器

@Configuration
public class WebConfig  {@Beanpublic FilterRegistrationBean timeFilter() {FilterRegistrationBean registrationBean = new FilterRegistrationBean();MyFilter myFilter = new MyFilter();registrationBean.setFilter(myFilter);ArrayList<String> urls = new ArrayList<>();urls.add("/*");//配置过滤规则------------url-pattern 中配置了/*之后,可以对所有要访问的资源拦截registrationBean.setUrlPatterns(urls);return registrationBean;}
}

拦截器和过滤器区别

(1)拦截器是基于java的反射机制的,而过滤器是基于函数回调。

(2)拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。

(3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

(4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能。

(5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

两者的本质区别:从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

Filter过滤器配置之入门相关推荐

  1. Java Web idea Filter配置(过滤器配置)

    一.过滤器的概述 1.1过滤器的概念及作用 概念 过滤器是一个能够拦截客户端与服务端请求和响应的web组件(Servlet.Filter.Listener). 2.画图分析 拦截请求:在请求到达客户端 ...

  2. spring boot 配置Filter过滤器

    Filter 过滤器是web开发中很重要的一个组件,下面以一个session登陆的例子介绍下spring boot中如何使用Filter 首先要准备一个实现了Filter的接口的类 SessionFi ...

  3. spring boot 配置多个Filter过滤器

    spring boot 配置Filter过滤器 1.通过 @WebFilter 注解来配置filet过滤器 @Component @WebFilter(urlPatterns = "/2/* ...

  4. springboot项目中利用@WebFilter注解和@Bean配置类两种方式实现Filter过滤器

    过滤器(Filter) 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理.通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 ...

  5. java项目配置过滤器_在JavaWeb项目中如何正确的使用Filter过滤器

    在JavaWeb项目中如何正确的使用Filter过滤器 发布时间:2020-11-11 17:12:00 来源:亿速云 阅读:79 作者:Leah 这期内容当中小编将会给大家带来有关在JavaWeb项 ...

  6. java过滤器的执行顺序_Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)...

    Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...

  7. Filter(过滤器)入门

    文章目录 第1章 什么是Filter 1.1 Filter简介 1.2 总结 1.3 主要API 1.3.1 Filter接口 1.3.2 FilterConfig接口 1.3.3 FilterCha ...

  8. Filter过滤器的例子与注解配置

    概念 作用 创建 创建web项目 定义类实现Servlet接口,实现其抽象方法 配置Filter 原理 注解配置 过滤器放行 Filter的生命周期 Filter的拦截路径 Filter的拦截方式 F ...

  9. 使用filter过滤器实现简单用户登录验证(不用配置web.xml文件)

    一.filter过滤器的作用 如果想要获取中文字符,或者是显示提交的中文,就需要添加以下代码,来防止乱码的情况发生. request.setCharacterEncoding("utf-8& ...

最新文章

  1. c语言arr什么意思6,初识C语言(六)
  2. 优雅地分离tableview回调
  3. Python五种常见的算法,你都了解么
  4. 【深度学习】超级赞!N个神经网络可视化利器
  5. 使用data-自定义数据及如何获取该值
  6. c语言popen函数多线程,关于多线程:多线程环境中的Python-Subprocess-Popen行为不一致...
  7. no required module provides package github.com/gorilla/mux
  8. [转贴]ASP.NET下对远程SQL SERVER数据库的备份和恢复的存储过程
  9. h3c交换机查看电源和风扇模块序列号
  10. sql怎么实现2个表连接_多表上SQL连接:概述和实现
  11. 用Excel表格拆分一行里的内容
  12. u盘忘在计算机房,基于MFC的防U盘等移动存储器的遗忘提醒系统
  13. 使用lsof命令恢复已删除文件(正在使用的文件)
  14. Linux Debian 系统的单网卡绑定多个IP地址的操作步骤
  15. 蓝桥杯嵌入式开发经验分享(1.嵌入式学习准备)
  16. Python调用Geopandas包矢量化txt点数据为shp数据
  17. 使用STVP菜单乱码阴影很乱变坏等情况
  18. 使用Scribus进行开源桌面发布
  19. Easydict 简洁易用的翻译词典,带你轻松优雅地查找单词或翻译文本。
  20. 科研项目绩效评价探讨︱项目绩效评价专题

热门文章

  1. 【转】那些我们不再使用的技术 - IT生活 - JavaEye新闻
  2. SAP 系统中过账码or记账码
  3. java基础,添加客户,修改客户名字
  4. C语言KR习题系列——统计一段文字中各个字母出现的频率
  5. Scrum里面猪和鸡的角色
  6. 新版本kali linux root修改回原来的骷髅头图标方法以及密钥
  7. 疲劳驾驶监测方案_一种疲劳驾驶检测方法
  8. hadoop概述-包括各个组件
  9. java图形界面(七)---组件综合练习
  10. 推荐一款好用的手机思维导图app