filter 作用

Servlet 过滤器

filter用于拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response,这样实现很多开发者想得到的功能。

一个过滤器是一个可以传送请求或修改响应的对象。过滤器并不是servlet,他们并不实际创建一个请求。他们是请求到达一个servlet前的预处理程序,和/或响应离开servlet后的后处理程序。一个过滤器能够:

·在一个servlet被调用前截获该调用

·在一个servlet被调用前检查请求

·修改在实际请求中提供了可定制请求对象的请求头和请求数据

·修改在实际响应中提供了可定制响应对象的响应头和响应数据

·在一个servlet被调用之后截获该调用

一个过滤器以作用于一个或一组servlet,零个或多个过滤器能过滤一个或多个servlet。一个过滤器需要实现java.servlet.Filter接口,并定义它的三个方法:

1.              void init(FilterConfig config) throws ServletException:在过滤器执行service前被调用,以设置过滤器的配置对象。

2.              void destroy();在过滤器执行service后被调用。

3.              Void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;执行实际的过滤工作。

服务器调用一次init(FilterConfig)以为服务准备过滤器,然后在请求需要使用过滤器的任何时候调用doFilter()。FilterConfig接口检索过滤器名、初始化参数以及活动的servlet上下文。服务器调用destory()以指出过滤器已结束服务。过滤器的生命周期和servelt的生命周期非常相似 ——在Servlet API 2.3 最终发布稿2号 中最近改变的。先前得用setFilterConfig(FilterConfig)方法来设置生命周期。

在doFilter()方法中,每个过滤器都接受当前的请求和响应,而FilterChain包含的过滤器则仍然必须被处理。doFilter()方法中,过滤器可以对请求和响应做它想做的一切。(就如我将在后面讨论的那样,通过调用他们的方法收集数据,或者给对象添加新的行为。)过滤器调用

chain.doFilter()将控制权传送给下一个过滤器。当这个调用返回后,过滤器可以在它的doFilter()方法的最后对响应做些其他的工作;例如,它能记录响应的信息。如果过滤器想要终止请求的处理或得对响应的完全控制,则他可以不调用下一个过滤器。

常见用法

处理全站中文乱码问题

实现自动登录

过滤敏感词汇

压缩网页

选择性让浏览器缓存

这几种功能的实现采用同样的原理,那就是使用包装模式或动态代理增强request或response对象的功能。

时间: 2024-10-05 22:13:06

filter 作用的相关文章

Filter的开发和使用

Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HTTPServletResponse进行后处理.与Servlet的区别在于:Filter不能直接向用户生成响应.其完成流程为:Filter对用户请求进行预处理,然后将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理.Filter作用如下: 1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest: 2.根据需要检查H

【Java技术点滴】——Filter基本使用与扩展

背景 在程序实现的过程中我们往往碰到类似于这样的问题:为了防止后台接收数据不能乱码,我们需要在处理的Servlet中设置请求字符集,就会在每一个Servlet中加上这样的代码: request.setCharacterEncoding("GB18030"); 这样的代码就是在程序中写死了的,设置字符集的功能是不利于维护的,如果将来要修改为另外一种字符集类型,需要在每个Servlet中进行修改.如果要进行封装,同样面临每个Servlet都要调用的问题,而往往这种方法调用是与具体业务需求关

Java Web基础知识之Filter:过滤一切你不想看到的事情

不要相信客户端, 所以做后端的人都应该铭记的事情.因为前端传过来的数据并不总是合法和有效的,所以后端是对访问资源的最后一道保护伞.之前我们在Spring中说到过AOP编程,AOP基础知识,它就可以在执行我们的方法之前进行一些预处理和验证来保护后端的资源.不难想到她的实现方式和本篇要说的过滤器的实现原理应该是相同的,都是通过Java的动态代理实现的(自己的理解). 在Java Web的开发中,过滤器用于拦截请求,并对ServletRequest对象进行处理,我们可以想到的,它可以用来验证权限.加密

Vue--使用watch、computed、filter方法来监控

watch与computed.filter: watch:监控已有属性,一旦属性发生了改变就去自动调用对应的方法 computed:监控已有的属性,一旦属性的依赖发生了改变,就去自动调用对应的方法 filter:js中为我们提供的一个方法,用来帮助我们对数据进行筛选 watch与computed的区别: 1.watch监控现有的属性,computed通过现有的属性计算出一个新的属性 2.watch不会缓存数据,每次打开页面都会重新加载一次, 但是computed如果之前进行过计算他会将计算的结果

登陆filter

1.什么是fiter Filter就像一个一个哨卡,用户的请求需要经过Filter,并且可以有多个过滤器 2.登陆filter作用 防止盗链接(没登陆就可以访问后台) 3.LoginFilter.java package com.zy.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig

.NET Core开发日志——Filter

ASP.NET Core MVC中的Filter作用是在请求处理管道的某些阶段之前或之后可以运行特定的代码. Filter特性在之前的ASP.NET MVC中已经出现,但过去只有Authorization,Exception,Action,Result四种类型,现在又增加了一种Resource类型.所以共计五种. Resource类型Filter在Authorization类型Filter之后执行,但又在其它类型的Filter之前.且执行顺序也在Model Binding之前,所以可以对Mode

Spring Boot 2 实战:如何自定义 Servlet Filter

1.前言 有些时候我们需要在 Spring Boot Servlet Web 应用中声明一些自定义的 Servlet Filter 来处理一些逻辑.比如简单的权限系统.请求头过滤.防止 XSS 攻击等.本篇将讲解如何在 Spring Boot 应用中声明自定义 Servlet Filter 以及定义它们各自的作用域和顺序. 2. 自定义 Filter 可能有人说声明 Servlet Filter 不就是实现 Filter 接口嘛,没有什么好讲的!是的这个没错,但是很多时候我们并不想我们声明的 F

Spring Boot 实战:如何自定义 Servlet Filter

1.前言 有些时候我们需要在 Spring Boot Servlet Web 应用中声明一些自定义的 Servlet Filter来处理一些逻辑.比如简单的权限系统.请求头过滤.防止 XSS 攻击等.本篇将讲解如何在 Spring Boot 应用中声明自定义 Servlet Filter 以及定义它们各自的作用域和顺序. 2. 自定义 Filter 可能有人说声明 Servlet Filter 不就是实现 Filter 接口嘛,没有什么好讲的!是的这个没错,但是很多时候我们并不想我们声明的 Fi

JS复习—数组

数组 一.数组的定义 数组是值得有序集合.每个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的,所以可以创建复杂的数组如对象的数组和数组的数组.每个数组都有一个length属性.JavaScript数组是对象的特殊形式,数组实际上是和碰巧是整数的属性名差不多.通常数组是经过优化的,用数组索引来访问元素比常规的对象属性要快得多.在ECMSScript中,字符串的行为与字符数组类似. 二.数组的创建 1.使用Array()构造函数 var colors = new A