一、在spring的应用中我们存在两种过滤的用法,一种是拦截器、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在springmvc中的用法基本上一样,只是配置上面有点区别。
二、filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
一个Filter包括:
1)、在servlet被调用之前截获;
2)、在servlet被调用之前检查servlet request;
3)、根据需要修改request头和request数据;
4)、根据需要修改response头和response数据;
5)、在servlet被调用之后截获.
1、Filter的应用场景
通过对filter过滤器的了解,可以得知在以下三种情况下可以做些处理:
1> 通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。
比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。
2> 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。
比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)。
3> 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。
比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。
2、Filter实现拦截的原理
Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。
3、过滤规则
//过滤应用程序中所有资源,当前应用程序根下的所有文件包括多级子目录下的所有文件,注意这里*前有“/” registration.addUrlPatterns("/*"); //过滤指定的类型文件资源, 当前应用程序根目录下的所有html文件,注意:*.html前没有“/”,否则错误 registration.addUrlPatterns(".html"); //过滤指定的目录下的所有文件,当前应用程序根目录下的folder_name子目录(可以是多级子目录)下所有文件 registration.addUrlPatterns("/folder_name/*"); //过滤指定文件 registration.addUrlPatterns("/index.html");
三、应用
@Component @ServletComponentScan @WebFilter(urlPatterns = "/login/*",filterName = "loginFilter") public class LoginFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { } @Override public void destroy() { } }
四、解释:
1、@Component 这个注解的目的是将LoginFilter交给容器来处理。也就是让LoginFilter起作用
2、@ServletComponentScan 这个使用来扫描@WebFilter 的让@WebFilter起作用。当然对于servlet线管注解也是可以的。这个@ServletComponentScan最好卸载Apllication这个上面,通用配置。我这里因为只有一个Filter所以没有写在Application上面。
3、@WebFilter 这个用处显而易见,针对于什么链接做过滤,filter的名称是为什么。
五、简单介绍一下springmvc中的Filter的用法
1、写的方法还是一样的都是继承Filter,来实现3个方法处理
2、丢入容器:这个需要配置在web.xml里面
<filter> <filter-name>loginFilter</filter-name> <filter-class>com.troy.boot.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3、具体的用法可以自己研究。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍SpringBoot拦截器Filter的使用方法详解,包括了SpringBoot拦截器Filter的使用方法详解的使用技巧和注意事项,需要的朋友参考一下 前言: 最新Servlet 3.0拦截器的使用 1.pom.xml添加需要使用的依赖 2.添加Filter拦截器 3.添加测试控制器 4.添加启动类 5.添加拦截后调整的页面filter.html 6.右键项目Run As启动项目,
本文向大家介绍AngularJS中filter的使用实例详解,包括了AngularJS中filter的使用实例详解的使用技巧和注意事项,需要的朋友参考一下 AngularJS中filter的使用实例详解 一、格式化数字为货币格式。 script: 显示为 二、lowercase 格式化字符串为小写。 显示为 三、uppercase 格式化字符串为大写。 显示为 四、filter 从数组项中选
本文向大家介绍Springboot中@Value的使用详解,包括了Springboot中@Value的使用详解的使用技巧和注意事项,需要的朋友参考一下 Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller、@Service、@Configuration、@Component等Spring托管的类中) 1.普通字符串注入 例:yml中存在key
本文向大家介绍Django ORM filter() 的运用详解,包括了Django ORM filter() 的运用详解的使用技巧和注意事项,需要的朋友参考一下 最近发布代码的时候,遇到一个问题,发现Python中eval()函数的危险性.然而我还是个菜鸟,其中有一段代码是这样的。 queryset = eval("models.TUserInfo.objects.filter({0})[{1}
本文向大家介绍Python中的filter()函数的用法,包括了Python中的filter()函数的用法的使用技巧和注意事项,需要的朋友参考一下 Python内建的filter()函数用于过滤序列。 和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。 例如
本文向大家介绍AngularJS的Filter的示例详解,包括了AngularJS的Filter的示例详解的使用技巧和注意事项,需要的朋友参考一下 贴上几个有关Filter使用的几个示例。 1. 首先创建一个表格 加上样式,显示如图 2. 看到价格个时间显示怪怪的,好,修改一下表格。 重新运行 3. 这样一下,确实不碍眼了。但是描述太长了吧,能不能超过一定字数,就不显示了,以...结尾? 好,在表
本文向大家介绍SpringBoot中的Thymeleaf用法,包括了SpringBoot中的Thymeleaf用法的使用技巧和注意事项,需要的朋友参考一下 Thymeleaf Thymeleaf是最近SpringBoot推荐支持的模板框架,官网在thymeleaf.org这里。 我们为什么要用Thymeleaf来作为模板引擎呢?官网给了我们一个非常令人信服的解释: Thymeleaf is a m
本文向大家介绍springboot中thymeleaf模板使用详解,包括了springboot中thymeleaf模板使用详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章将更加全面详细的介绍thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。 thymeleaf介绍 简单说, Thymeleaf 是一个跟 Vel