过滤器 Filter
Filter(过滤器)简介
Filter 的基本功能是对发送到 Servlet 的请求进行拦截, 并对响应也进行拦截.
Filter 程序是一个实现了 Filter 接口的 Java 类,与 Servlet 程序相似,它由 Servlet 容器进行调用和执行
Filter 程序需要在 web.xml 文件中进行注册和设置它所能拦截的资源:Filter 程序可以拦截 Jsp, Servlet, 静态图片文件和静态 html 文件
aaarticlea/png;base64,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" alt="" width="510" height="255" />
如何创建一个 Filter
①. 创建一个 Filter 类: 实现 Filter 接口: public class HelloFilter implements Filter
②. 在 web.xml 文件中配置并映射该 Filter. 其中 url-pattern 指定该 Filter 可以拦截哪些资源, 即可以通过哪些 url 访问到该 Filter
<!-- 注册 Filter -->
<filter>
<filter-name>helloFilter</filter-name>
<filter-class>com.atguigu.javaweb.HelloFilter</filter-class>
</filter> <!-- 映射 Filter -->
<filter-mapping>
<filter-name>helloFilter</filter-name>
<url-pattern>/test.jsp</url-pattern>
</filter-mapping>
Filter 相关的 API:
①. Filter 接口:
> public void init(FilterConfig filterConfig): 类似于 Servlet 的 init 方法. 在创建 Filter 对象(Filter 对象在 Servlet 容器加载当前 WEB 应用时即被创建)后, 立即被调用, 且只被调用一次. 该方法用于对当前的 Filter 进行初始化操作. Filter 实例是单例的.
* FilterConfig 类似于 ServletConfig
* 可以在 web.xml 文件中配置当前 Filter 的初始化参数. 配置方式也和 Servlet 类似。
<filter>
<filter-name>helloFilter</filter-name>
<filter-class>com.atguigu.javaweb.HelloFilter</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>root</param-value>
</init-param>
</filter>
> public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 真正 Filter 的逻辑代码需要编写在该方法中. 每次拦截都会调用该方法.
* FilterChain: Filter 链. 多个 Filter 可以构成一个 Filter 链.
aaarticlea/png;base64,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E7QJiiEQ3ARBBGKbQBgiFwVtBCEiIYQDLgoCEVHwJcx7Oy3u9d55P+d6z8xzn3M/n5Vnjs/z/GbuYr48zzNziMz169e3bt26uLgYuhAAAhDdID47duz49ddfQ1cBQACiG8Tn+PHjaZqGrgKAAEQ3iM+333771ltvha4CgABEN4jPX3/99cwzz4SuAoAARDeI0osvvvjHH3+ErgKAvoluEKWjR4+eOXMmdBUA9E10gyh99dVX7777bugqAOib6AZRGo1Gzz//fOgqAOib6Aax2rZt29WrV0NXAUCvRDeI1TvvvPP111+HrgKAXoluEKvTp08fO3YsdBUA9Ep0g1hdvnx5+/btoasAoFeiG8Tqv//+e+qpp/7+++/QhQDQH9ENInbw4MGzZ8+GrgKA/ohuELHPP//8gw8+CF0FAP0R3SBily5d2rlzZ+gqAOiP6AYRW1hYeOKJJ27cuBG6EAB6IrpB3F5//fXvv/8+dBUA9ER0g7h9+umnJ06cCF0FAD0R3SBuv/zyy+7du0NXAUBPRDeI2/3797ds2XL79u3QhQDQB9ENord3794ffvghdBUA9EF0g+idOnXq448/Dl0FAH0Q3SB6Fy5c2LNnT+gqAOiD6AbRu3v37pYtW/7555/QhQDQOdEN5sErr7zy888/h64CgM6JbjAPTp48+cknn4SuAoDOiW4wD86fP//aa6+FrgKAzoluMA9u3rz52GOPPXjwIHQhAHRLdIM5sWvXrosXL4auAoBuiW4wJz766KPPPvssdBUAdEt0gznx3XffHThwIHQVAHRLdIM5ce3atSeffHJxcXHp4++//3716tWwJQEwc6IbzI+XX375t99+W/r3gQMHzp07F7YeAGZOdIO4/fjjj3fv3l3693vvvffll1+Ox+N79+49/vjjt27dCloaALMnukHcPvzww1dffXXpV7C++eabt99+ezwenz9/ft++faFLA2D2RDeI2+Li4uHDh994441///33zz//fO6558bjcZIkX3zxRejSAJg90Q2i9+DBgzfffPPQoUMLCwsvvPDClStXtm3bNhqNQtcFwOyJbjAP7t+/v3///iNHjhw5cuT9999/6aWXQlcEQCdEN5gT9+7d27dv32AwGAwGJ06cCF0OAJ0Q3WB+3Llz5+mnnx4MBj/99FPoWgDohOgGc+XWrVvPPvus36EHmFeiG8ybhYWF0CUA0BXRDQAgGqIbAEA0RDcAgGiIbgAA0RDdAACiIboBAERDdAMAiIboBgAQDdENACAaohuwWWXJMB2FLgJgbUQ36NkoTbPQNbQZZdmmiDOjdJhs6D8EQC3RDfozSoeDwWCwrsSQJevtodFyedPNRC3/54piaQ3V5hoHik9ZEmpkgPUR3aBf680MHUa38Xg8HqXD6RcRs6SU87KkVFt7taN0GCZACW5AvEQ36NcGTw3ri27j8ThLpj+99uiWpR1tRAuWGGeus0sEbGCiG/RrjqPbmoNEa4bq7BmCOUpuHrOAzUh0g37Nb3Rbe5BoCVGjdDjlprs1q5srjFGHlwjYyEQ36EKWrOzbL91dl6Lb6veFrwt7/8u35dU2pbiz+vTDavu13NPzDw2kleiWr6k0cO4sK4M2VlvquvJtzfMPNauyle9Kp77ysdK2ZtDp2jb/TQvtR2lSLGllsKUOmv+sNX+00sVY7mqaSwTMLdENZi5LcrfS8s79pTv1wyP5mZNSpmiYHGqYqSrGgjVMyIzSYSldlAPY6ueabyfMurUvTrZ92zz9Vx61WlKa5DJYeYDKoxRTtW0etHBRRumwcInKZ1j+o7aeS3GGtlr3mmZIgbkhusGMlW6xNXEnfwPO3X5LN+6GG3NzdGvodk3VFhtWxyoembzXbfbRrXK8eGDyA7jNgza3bR60EpKL16Q9uk04l/LXq/N5Dc2BTUF0g9matAl+UsbKL4Z1H90qveUb1s3dFaLe5F1jM49u9a+Ta0yTdRr/S+MXLYPWvR9l2ug26VzGK6upjWWJbrAJiW4wW48e3Zbu5PngtAGiW3mowrFA0W3C5Z104o1dtEa3hkHXG92me2Sl/mXJohtsTqIbzFhNAMivJDZlrNYQVTw84wXT5vW+NS6Y1phRdMuy1i1fuV8Wm+bx0aZhm9s2D1rpay0LppPOJW2Pak2XaCnobeTnmIH1EN1g1kob3Eu/ldkW3Wr2yJX3Nz1SdCs+GlFpWNxy3/KYQnkFtePotvpAZVo8teIKactWsyb1b2hpadsyaCF/lR9TqCwwF7+deC7l3FcO97WXqPxkKzBfRDfoQMOGtfK7O0ov0Ci8ayPJyu+SaHwVx4Ru26Nb6f9Xb/sNLwfJv1GkYfWxvtpyn419rPRQzVO5zvPP6jYPWNd5UpqmmtS2ZtBK89UnVOub1bwfpLHb9kvYfomspcIcE92ATak0GzorG+KFv5IbzDPRDdisZv1DUuXpzzA2RHgEuiO6AQBEQ3QDAIiG6AYAEA3RDQAgGqIbAEA0RDcAgGiIbsCjyRLv6wfonegGPKr635MCoEOiG/DovLYfoGeiG7AeZt4AeiW6Aeti4g2gT6IbsD6jdGjiDaAvohuwTn7vHKA/ohvM0igdDpYM01HuYzHaZMlgMKj7Itd+MBgMViazlg8nWa5pJS3l2+ZmwVbbloqbNOjkanPtTbsB9EN0gw5kyWCYpkkuv61Gm+IcVeFTYct/lhRT1FKCWjmSJYNSP8WOCjFrqe3DI6N0OO2gbdWuKPYHQJdEN+hAltTMXo3H45pN/bkD5e9GaVKMX8UeczmqOu9VPFJqmx+oddC2apvGAqBLoht0oHH3V2ltsrJEubw4Wde4Et1WE1PdtFdh/qwlurUNOqnaSWcLwMyJbtCB1ug2xQTVcmYq9FE365aLbuVeC8fao1vjoNNVa9INoEeiG3SgeR6qsplsPErT5c9ZWnlmobjPrNAwP9W2jgXT1kHbqq0fCYBuiW7QgZYlxMpDC81BqRi4ivvnyrvpig8mlFdQ26Jb66At1U4+VQBmT3SDWarsDquNNbnXbVSfIW1qmyWDJGt5N8iEl4OsNFntIskmDtpS7cPOBTeAPoluEIkN+GOho3S40UoCmHeiG0QgN6G2cbJSzeopAF0T3QAAoiG6AQBEQ3QDAIiG6AYAEA3RDQAgGqIbAEA0RDcAgGiIbgAA0RDdAACiIboBAERDdAMAiIboBgAQjf8Bk2IwgVUizwIAAAAASUVORK5CYII=" alt="" width="602" height="260" />
- doFilter(ServletRequest request, ServletResponse response):
把请求传给 Filter 链的下一个 Filter,若当前 Filter 是 Filter 链的最后一个 Filter, 将把请求给到目标 Serlvet(或 JSP)
- 多个 Filter 拦截的顺序和 <filter-mapping> 配置的顺序有关, 靠前的先被调用.
理解 Filter 链:
aaarticlea/png;base64,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" alt="" width="551" height="400" />
> public void destroy(): 类似于 Servlet 的destroy() 方法; 释放当前 Filter 所占用的资源的方法. 在 Filter 被销毁之前被调用, 且只被调用一次.
<dispatcher> 元素:
指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST.
可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截
①. REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
通过 GET 或 POST 请求直接访问。
②. FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
或 <jsp:forward page="/..." /> 或 通过 page 指令的 errorPage 转发页面. <%@ page errorPage="test.jsp" %>
②. INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。或 <jsp:include file="/..." />
④. ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
在 web.xml 文件中通过 error-page 节点进行声明:
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/test.jsp</location>
</error-page> <filter-mapping>
<filter-name>secondFilter</filter-name>
<url-pattern>/test.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
应用
1. 禁用缓存的过滤器
有 3 个 HTTP 响应头字段都可以禁止浏览器缓存当前页面,它们在 Servlet 中的示例代码如下:
response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头
2. 解决字符编码的过滤器
通过配置参数encoding指明使用何种字符编码,以处理Html Form请求参数的中文问题
3. 检验用户是否登录的过滤器
HttpServletWrapper 和 HttpServletResponseWrapper
1). Servlet API 中提供了一个 HttpServletRequestWrapper 类来包装原始的 request 对象,HttpServletRequestWrapper 类实现了 HttpServletRequest 接口中的所有方法,
这些方法的内部实现都是仅仅调用了一下所包装的的 request 对象的对应方法
//包装类实现 ServletRequest 接口.
public class ServletRequestWrapper implements ServletRequest { //被包装的那个 ServletRequest 对象
private ServletRequest request; //构造器传入 ServletRequest 实现类对象
public ServletRequestWrapper(ServletRequest request) {
if (request == null) {
throw new IllegalArgumentException("Request cannot be null");
}
this.request = request;
} //具体实现 ServletRequest 的方法: 调用被包装的那个成员变量的方法实现。
public Object getAttribute(String name) {
return this.request.getAttribute(name);
} public Enumeration getAttributeNames() {
return this.request.getAttributeNames();
} //...
}
相类似 Servlet API 也提供了一个 HttpServletResponseWrapper 类来包装原始的 response 对象
2). 作用: 用于对 HttpServletRequest 或 HttpServletResponse 的某一个方法进行修改或增强.
public class MyHttpServletRequest extends HttpServletRequestWrapper{ public MyHttpServletRequest(HttpServletRequest request) {
super(request);
} @Override
public String getParameter(String name) {
String val = super.getParameter(name);
if(val != null && val.contains(" fuck ")){
val = val.replace("fuck", "****");
}
return val;
}
}
3). 使用: 在 Filter 中, 利用 MyHttpServletRequest 替换传入的 HttpServletRequest
HttpServletRequest req = new MyHttpServletRequest(request);
filterChain.doFilter(req, response);
此时到达目标 Servlet 或 JSP 的 HttpServletRequest 实际上是 MyHttpServletRequest
自定义HttpFilter 类
/**
* 自定义的 HttpFilter, 实现自 Filter 接口
*
*/
public abstract class HttpFilter implements Filter {
/**
* 用于保存 FilterConfig 对象.
*/
private FilterConfig filterConfig; /**
* 不建议子类直接覆盖. 若直接覆盖, 将可能会导致 filterConfig 成员变量初始化失败
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
init();
} /**
* 供子类继承的初始化方法. 可以通过 getFilterConfig() 获取 FilterConfig 对象.
*/
protected void init() {} /**
* 直接返回 init(ServletConfig) 的 FilterConfig 对象
*/
public FilterConfig getFilterConfig() {
return filterConfig;
} /**
* 原生的 doFilter 方法, 在方法内部把 ServletRequest 和 ServletResponse
* 转为了 HttpServletRequest 和 HttpServletResponse, 并调用了
* doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
*
* 若编写 Filter 的过滤方法不建议直接继承该方法. 而建议继承
* doFilter(HttpServletRequest request, HttpServletResponse response,
* FilterChain filterChain) 方法
*/
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp; doFilter(request, response, chain);
} /**
* 抽象方法, 为 Http 请求定制. 必须实现的方法.
* @param request
* @param response
* @param filterChain
* @throws IOException
* @throws ServletException
*/
public abstract void doFilter(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws IOException, ServletException; /**
* 空的 destroy 方法。
*/
@Override
public void destroy() {} }
过滤器 Filter的更多相关文章
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- 网站过滤器Filter
实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...
- paip.输出内容替换在Apache 过滤器filter的设置
paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- [ionic开源项目教程] - 第6讲 过滤器filter的使用
过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...
- selvert的过滤器filter处理中文乱码
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...
- MVC之 自定义过滤器(Filter)
MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...
- Servlet中的过滤器Filter用法
1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...
- Servlet中的过滤器Filter详解
加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...
- AngularJS的过滤器$filter
过滤器(filter)主要用于数据的格式上,通过某个规则,把值处理后返回结果.例如获得数据集,可排序后再返回. ng内置的共有九种过滤器: currency 货币 使用currency可以将数字格式化 ...
随机推荐
- (六)ARM状态寄存器-PSR
ARM程序状态寄存器Program State Register 在ARM模式中, 有16个数据寄存器和1或2个状态寄存器是可以随时访问的.在特权模式 (privileged mode) 下, 对应的 ...
- Android广播BroadcastReceiver 一
Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...
- iOS之UIImagePickerController的应用
直接代码敬之 @import MobileCoreServices; @import AVFoundation; <UIImagePickerControllerDelegate,UINavig ...
- Android软键盘弹出时把布局顶上去的解决方法
原文: 解决Andriod软键盘出现把原来的布局给顶上去的方法(转) 链接:http://blog.sina.com.cn/s/blog_9564cb6e0101g2eb.html 决方法,在main ...
- 本地获取System权限CMD方法汇总(转)
本地获取System权限CMD方法汇总(转) 稍微整理了下,大概有三种方法可以本地获取system权限的cmd,但前提都是当前用户具备administrator权限. 下面列举的三种方法各有千秋,看你 ...
- rsync同步完整配置
一.需求: 1.对于分公司访问一些服务器(如工程图纸服务器),如果通过Internet上的VPN访问总是觉得速度慢,毕竟带宽有限,为了解决此问题,可以两地建立同步镜像服务器,分公司可以访问本地的镜像服 ...
- 【java】异常和处理
(根据http://www.imooc.com/learn/110 陈码农老师教学视频总结) 一.异常体系结构 所有不正常类都继承于Throwable类 1.异常两个子类 error & ...
- shell中for循环
shell中for循环总结 最常用的就是遍历操作某一类文件,比如批量建索引. for i in `ls` do samtools faidx $i done 注意:for末尾不需要冒号(:),循环的代 ...
- listview定位到上次显示的位置
整体思路:滑动lictview时,记录listview的位置,定位时定位到该位置. 1.添加全局变量 private int scrolledX = 0; private int scrolledY ...
- java 集合2(迭代器)
迭代器方法:(把迭代器想象成抓娃娃机的爪子) hasNext() 问是否有元素可遍历,如果有元素可以遍历,返回true,否则返回false 工作原理:这一个迭代的过程是这样的,获取到迭代器时候 ...