Filter何时进行url过滤

filter(过滤器)作用于在intreceptor(拦截器)之前,不像intreceptor一样依赖于springmvc框架,只需要依赖于serverlet。

Filter在spring /springboot中如何使用

1.自定义Filter

比较原始的一种方法是定义一个MyFilter实现javax.servlet.Filter接口

public class MyFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 对request或 response 进行处理// 调用filter链中的下一个filterfilterChain.doFilter(servletRequest,servletResponse);}
}

另一种方法的自定义Filter,继承springframework.web.filter.OncePerRequestFilter,可以对同一个请求,只经过一次过滤

public class MyFilter extends OncePerRequestFilter {/**此处不能@override doFilter方法*  因为OncePerRequestFilter中 doFilter方法已经是final**///自定义处理方法public void interrupt(HttpServletResponse response, ErrorCode code){//此处对response进行处理}//重载OnecePerRequestFilter方法@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain){//调用自定义处理方法interrupt(response,code);//对request 、response进行处理}}

OncePerRequestFilter中的方法

修饰符和类型 方法和描述
void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)

doFilter实现存储“已过滤”的请求属性,如果属性已经存在,则继续进行而不再过滤。

protected abstract void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)

和doFilter相同功能,但保证在单个请求线程中每个请求只调用一次。

protected java.lang.String getAlreadyFilteredAttributeName()

返回标识已过滤请求的请求属性的名称。

protected boolean isAsyncDispatch(HttpServletRequest request)

javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的调度程序类型意味着可以在单个请求的过程中在多个线程中调用过滤器。

protected boolean isAsyncStarted(HttpServletRequest request)

请求处理是否处于异步模式,这意味着在退出当前线程后不会提交响应

protected boolean shouldNotFilter(HttpServletRequest request)

可以在子类中重写以进行自定义筛选控制,返回true以避免过滤给定的请求。

protected boolean shouldNotFilterAsyncDispatch()

javax.servlet.DispatcherType.ASYNCServlet 3.0中引入的调度程序类型意味着可以在单个请求的过程中在多个线程中调用过滤器。

protected boolean shouldNotFilterErrorDispatch()

是否过滤错误调度,例如servlet容器处理和映射错误时web.xml

2.注册自定义Filter

在springboot中可以写一个配置类,使用@Bean注入myFilterBean

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;@Configuration
public class MyFilterConfig {@Beanpublic FilterRegistrationBean myFilterBean(MyFilter filter) {FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();filterRegistrationBean.setFilter(filter);//设置为自定义的过滤器MyFilterfilterRegistrationBean.addUrlPatterns("/*");//拦截所有请求filterRegistrationBean.setOrder(1);//优先级为1return filterRegistrationBean;}//可注册多个自定义的过滤器
}

如果是使用xml配置则在web.xml配置如下( 注意配置多个filter时优先级由filter的配置顺序决定优先级)

<filter><filter-name>myFilter</filter-name><filter-class>com.text.filter.myFilter</filter-class></filter><filter-mapping><filter-name>myFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

spring中的Filter使用相关推荐

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

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

  2. Spring中Controller层、Filter层、Interceptor层全局统一异常处理

    Controller层.Filter层.Interceptor层全局统一异常处理 SpringBoot为异常处理提供了很多优秀的方法,但是像我这种新手在处理异常时还是会觉得一头包,终于我痛定思痛,总结 ...

  3. SpringBoot学习之路:09.Spring Boot中添加Filter应用

    2019独角兽企业重金招聘Python工程师标准>>> 上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现 ...

  4. spring中那些让你爱不释手的代码技巧

    紧接上文<spring中这些能升华代码的技巧,可能会让你爱不释手>.本文继续总结我认为spring中还不错的知识点,希望对您有所帮助. 一. @Conditional的强大之处 不知道你们 ...

  5. spring中这些能升华代码的技巧,可能会让你爱不释手

    前言 最近越来越多的读者认可我的文章,还是件挺让人高兴的事情.有些读者私信我说希望后面多分享spring方面的文章,这样能够在实际工作中派上用场.正好我对spring源码有过一定的研究,并结合我这几年 ...

  6. Java Web中的Filter和Interceptor的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.问题的来源 项目中使用了Filter,进行白名单的控制,同时使用了Filter进行了跨域请求的控制,使用了Intercep ...

  7. javaweb过滤器_JavaWeb技术(2):SpringMVC中的Filter

    Filter顾名思义就是过滤器,在JavaWeb体系中,他在服务端,卡在请求/响应与Servlet之间做一些操作: 过滤器相关的类的顶层接口如下,以下方法都由Web容器自动调用: package 你可 ...

  8. java观察者模式在spring中的应用_利用spring自己实现观察者模式

    利用spring,自己实现的一个观察者模式,写着玩玩,目的是为了加深理解,下次用Spring自带的玩一玩. 首先我们定义一个侦听类接口 package com.hyenas.common.listen ...

  9. Druid 在spring中的配置

    Spring配置中dataSource配置 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDat ...

最新文章

  1. bzoj3600 没有人的算术
  2. 浅谈专有云MQ存储空间的清理机制
  3. 一道百度前端线上笔试题
  4. Html5中Canvas(画布)的使用
  5. istio可以做什么_什么是Istio?
  6. python filter_Python filter()
  7. 有感于Oracle 9i的QueryHints
  8. spring mvc controller间跳转 重定向 传参 (转)
  9. 形式语言与自动机理论 pdf_448页伊利诺伊大学算法图书【附PDF资料】
  10. 二维平面中二维向量的叉乘 得到的向量,x、y方向上的分量必定为0
  11. 工作日记:JavaScript生成随机色
  12. Tomorrow never knows? (C程序设计进阶 第2周)
  13. OpenEuler 会长久吗
  14. 学习软件工程的知名网站
  15. c++小项目:基于STL的演讲比赛流程管理系统
  16. Java: getDocument()与setCaretPosition()的问题
  17. 正则表达式学习(三)转义和反义
  18. 兼容IE浏览器的PrintArea
  19. ubuntu 开启php cul,Ubuntu中,加速软件下载和安装的方法
  20. PHP网站验证码显示不出来

热门文章

  1. 从代码重构角度聊一聊java8的函数式接口
  2. 解决报错error resource androidattrdialogCornerRadius not found
  3. C语言经典100题——用选择法排序
  4. FPGA中的流水线设计(Pipeline Design)
  5. Mysql语句查询统计一天中每个小时数据的数量统计
  6. 2017.7.15. SPFA + 并查集
  7. 实例解密“ZVS反激开关电源”!
  8. 通信小常识(手机上网使用几G网络)[手机信号G、E、O、3G、H、H+的什么意思]
  9. 数学分析第一章第二章知识点概要
  10. WCF服务引用的两种方法