spring中的Filter使用
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)
此 |
protected abstract void |
doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
protected java.lang.String |
getAlreadyFilteredAttributeName()
返回标识已过滤请求的请求属性的名称。 |
protected boolean |
isAsyncDispatch(HttpServletRequest request)
|
protected boolean |
isAsyncStarted(HttpServletRequest request)
请求处理是否处于异步模式,这意味着在退出当前线程后不会提交响应 |
protected boolean |
shouldNotFilter(HttpServletRequest request)
可以在子类中重写以进行自定义筛选控制,返回 |
protected boolean |
shouldNotFilterAsyncDispatch()
|
protected boolean |
shouldNotFilterErrorDispatch()
是否过滤错误调度,例如servlet容器处理和映射错误时 |
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使用相关推荐
- Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...
- Spring中Controller层、Filter层、Interceptor层全局统一异常处理
Controller层.Filter层.Interceptor层全局统一异常处理 SpringBoot为异常处理提供了很多优秀的方法,但是像我这种新手在处理异常时还是会觉得一头包,终于我痛定思痛,总结 ...
- SpringBoot学习之路:09.Spring Boot中添加Filter应用
2019独角兽企业重金招聘Python工程师标准>>> 上篇文章中说了SpringBoot中是如何使用servlet的,本文将讲解在SpringBoot中对过滤器Filter的实现 ...
- spring中那些让你爱不释手的代码技巧
紧接上文<spring中这些能升华代码的技巧,可能会让你爱不释手>.本文继续总结我认为spring中还不错的知识点,希望对您有所帮助. 一. @Conditional的强大之处 不知道你们 ...
- spring中这些能升华代码的技巧,可能会让你爱不释手
前言 最近越来越多的读者认可我的文章,还是件挺让人高兴的事情.有些读者私信我说希望后面多分享spring方面的文章,这样能够在实际工作中派上用场.正好我对spring源码有过一定的研究,并结合我这几年 ...
- Java Web中的Filter和Interceptor的区别
2019独角兽企业重金招聘Python工程师标准>>> 1.问题的来源 项目中使用了Filter,进行白名单的控制,同时使用了Filter进行了跨域请求的控制,使用了Intercep ...
- javaweb过滤器_JavaWeb技术(2):SpringMVC中的Filter
Filter顾名思义就是过滤器,在JavaWeb体系中,他在服务端,卡在请求/响应与Servlet之间做一些操作: 过滤器相关的类的顶层接口如下,以下方法都由Web容器自动调用: package 你可 ...
- java观察者模式在spring中的应用_利用spring自己实现观察者模式
利用spring,自己实现的一个观察者模式,写着玩玩,目的是为了加深理解,下次用Spring自带的玩一玩. 首先我们定义一个侦听类接口 package com.hyenas.common.listen ...
- Druid 在spring中的配置
Spring配置中dataSource配置 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDat ...
最新文章
- bzoj3600 没有人的算术
- 浅谈专有云MQ存储空间的清理机制
- 一道百度前端线上笔试题
- Html5中Canvas(画布)的使用
- istio可以做什么_什么是Istio?
- python filter_Python filter()
- 有感于Oracle 9i的QueryHints
- spring mvc controller间跳转 重定向 传参 (转)
- 形式语言与自动机理论 pdf_448页伊利诺伊大学算法图书【附PDF资料】
- 二维平面中二维向量的叉乘 得到的向量,x、y方向上的分量必定为0
- 工作日记:JavaScript生成随机色
- Tomorrow never knows? (C程序设计进阶 第2周)
- OpenEuler 会长久吗
- 学习软件工程的知名网站
- c++小项目:基于STL的演讲比赛流程管理系统
- Java: getDocument()与setCaretPosition()的问题
- 正则表达式学习(三)转义和反义
- 兼容IE浏览器的PrintArea
- ubuntu 开启php cul,Ubuntu中,加速软件下载和安装的方法
- PHP网站验证码显示不出来
热门文章
- 从代码重构角度聊一聊java8的函数式接口
- 解决报错error resource androidattrdialogCornerRadius not found
- C语言经典100题——用选择法排序
- FPGA中的流水线设计(Pipeline Design)
- Mysql语句查询统计一天中每个小时数据的数量统计
- 2017.7.15. SPFA + 并查集
- 实例解密“ZVS反激开关电源”!
- 通信小常识(手机上网使用几G网络)[手机信号G、E、O、3G、H、H+的什么意思]
- 数学分析第一章第二章知识点概要
- WCF服务引用的两种方法