`
puppy117
  • 浏览: 52246 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Filter

阅读更多
Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。
主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。
Filter 有如下几个用处。
·在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。
·根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
·在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。
·根据需要检查HttpServletResponse ,也可以修改HttpServletResponse 头和数据。
Filter 有如下几个种类。
·用户授权的Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求。
.日志Filter: 详细记录某些特殊的用户请求。
·负责解码的Filter: 包括对非标准编码的请求解码。
.能改变XML 内容的XSLTFilter 等。
一个Filter 可负责拦截多个请求或响应:一个请求或响应也可被多个请求拦截。
创建一个Filter 只需两个步骤:
(1)创建Filter 处理类:
(2)在web.xml 文件中配置Filter 。
一、创建Filter类
创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
• void init(FilterConfig config): 用于完成Filter 的初始化。
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
public class LogFilter implements Filter {

	private FilterConfig config;

	// 实现初始化方法
	public void init(FilterConfig config) {
		this.config = config;
	}

	// 实现销毁方法
	public void destroy() {
		this.config = null;
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		// 获取ServletContext 对象,用于记录日志
		ServletContext context = this.config.getServletContext();
		long before = System.currentTimeMillis();
		System.out.println("开始过滤... ");
		// 将请求转换成HttpServletRequest 请求
		HttpServletRequest hrequest = (HttpServletRequest) request;
		// 记录日志
		context.log("Filter已经截获到用户的请求的地址: " + hrequest.getServletPath());
		try {
			// Filter 只是链式处理,请求依然转发到目的地址。
			chain.doFilter(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
		long after = System.currentTimeMillis();
		// 记录日志
		context.log("过滤结束");
		// 再次记录日志
		context.log(" 请求被定位到" + ((HttpServletRequest) request).getRequestURI()
				+ "所花的时间为: " + (after - before));
	}
}

在上面的请求Fil阳中,仅在日志中记录请求的URL,对所有的请求都执行chain.doFilter(request,reponse)方法,当Filter 对请求过滤后,依然将请求发送到目的地址。如果检查权限,可以在Filter 中根据用户请求的HttpSession,判断用户权限是否足够。如果权限不够,则调用重定向即可,无须调用chain.doFilter(request,reponse)方法。
二、配置Filter
Filter 的配置和Servlet 的配置非常相似,都需要配置两个部分:
·配置Filter 名。
·配置Filter 拦截URL 模式。
区别在于, Servlet 通常只配置一个URL ,而Filter 可以同时拦截多个请求的URL。因此,可以配置多个Filter 拦截模式。
<!-- 定义Filter -->
<filter>
	<!-- Filter 的名字 -->
	<filter-name>log</filter-name>
	<!-- Filter 的实现类 -->
	<filter-class>lee.LogFilter</filter-class>
</filter>
<!-- 定义Filter 拦截地址 -->
<filter-mapping>
	<!-- Filter 的名字 -->
	<filter-name>log</filter-name>
	<!-- Filter 负责拦截的URL -->
	<servlet-name>*</servlet-name>
</filter-mapping>

分享到:
评论

相关推荐

    cors-filter-2.5.jar

    标题中的“cors-filter-2.5.jar”是一个Java Web应用程序使用的库,专门用于处理跨域资源共享(CORS)的问题。CORS是一种机制,允许Web应用通过浏览器从不同源(即非同源策略允许的源)获取资源,以克服浏览器的同源...

    RF filter.rar_RF CBF filter_rf_Filter_rffilter_射频滤波器_滤波器 参数

    本资料“RF filter.rar”涵盖了射频滤波器设计的各种方面,包括低通滤波器、带通滤波器以及Chebyshev滤波器,这些都是射频滤波器的常见类型。 1. 射频低通滤波器:这种滤波器允许低频信号通过,而阻止高频信号。在...

    java filter打印请求返回参数

    ### Java Filter 打印请求返回参数详解 #### 一、背景与目的 在Web开发过程中,经常需要在请求处理流程中增加一些通用的功能,比如日志记录、性能监控、安全控制等。Java Servlet规范提供了Filter机制来实现这些...

    Servlet Filter 的单元测试

    Servlet Filter 是Java Servlet API中的一个重要组件,主要用于在Servlet处理请求之前或之后进行拦截处理,例如权限检查、日志记录、内容转换等。进行Servlet Filter的单元测试是确保Filter功能正确性和健壮性的重要...

    filter solutions 简易教程

    Filter Solutions 简易教程 Filter Solutions 是一种滤波器设计软件,旨在帮助用户快速设计和实现滤波器电路。下面是 filter solutions 简易教程的知识点总结: 一、Filter Solutions 软件简介 * Filter ...

    FilterPro使用指南

    TI公司开发的FilterPro是一款软件工具,旨在辅助工程师设计由多重反馈(MFB)和Sallen-Key拓扑结构实现的有源滤波器。它能够减少设计和验证有源滤波器时所耗费的时间和精力,这对于现代电子设计而言极为重要,因为...

    FilterPro TI滤波器设计 安装包

    **FilterPro TI滤波器设计软件详解** FilterPro是由美国Texas Instruments(TI)公司开发的一款专业滤波器设计工具,广泛应用于信号处理、通信、音频系统等领域。它为工程师提供了直观且高效的滤波器设计环境,能够...

    Datagrid-filter插件

    `Datagrid-filter`插件正是针对这种需求设计的,它是一个高效且实用的Grid插件,旨在提升数据网格的可操作性和用户交互性。这个插件的核心功能是为每一列提供过滤条件,使得用户能够快速筛选出所需的信息,极大地...

    java中filter的用法(过滤器)

    ### Java中的Filter(过滤器)使用详解 #### 一、Filter概述 在Java Web开发中,`Filter`是一种非常实用的技术,它可以在请求到达目标资源(如Servlet或JSP页面)之前进行预处理,或者在响应返回客户端之前进行后...

    cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar

    标题中的“cors-filter-1.7.jar”,“cors-filter-2.5.jar”和“cors-filter-2.10.jar”是针对不同版本的CORS过滤器实现。这些jar包是专门为Tomcat设计的,用于处理跨域请求过滤,确保服务器能够安全地响应来自不...

    filter wiz pro v5

    Filter Wiz Pro适用于低于-1Hz 至10MHz 范围内的截止频率,而适用于此范围的无源滤波器设计必须具备非常大的组件值和组件尺寸  Filter Wiz Pro在几分钟内便能让您设计、优化和仿真一套完整的多级有源滤波器解决方案...

    预防XSS攻击和SQL注入XssFilter

    &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    Filter过滤器的代码及其web.xml配置代码

    在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,比如防止跨站脚本攻击(XSS)、处理字符编码问题、实现权限控制等。在这个主题中,我们将深入理解Filter的...

    FilterBuilder过滤器

    在IT领域,尤其是在Web开发中,`FilterBuilder`是一个重要的工具,它允许用户构建自定义的查询和过滤条件,以动态地筛选数据。这个组件通常用于数据量大、需要复杂查询逻辑的应用场景,如数据分析、报表展示或者管理...

    FilterPro 安装及基本教程中英文

    FilterPro是一款由德州仪器(TI)开发的专业有源滤波器设计软件,它为电子工程师提供了强大而便捷的工具,用于模拟和优化滤波器设计。本教程将涵盖FilterPro的安装过程以及基本的使用方法,包括Sallen-Key滤波器和多...

    imu_filter_madgwick_IMU滤波_filter_imu_filter_madgwick_IMU_IMU滤波_源

    标题中的“imu_filter_madgwick”指的是Madgwick滤波算法,这是一类用于惯性测量单元(IMU)数据处理的算法,主要用于融合来自陀螺仪和加速度计的数据,以消除噪声和漂移,提高传感器测量的稳定性和准确性。...

    filter pro 有源滤波器设计软件 TI公司

    **Filter Pro 有源滤波器设计软件:TI公司的创新工具** Filter Pro是一款由美国德州仪器(TI)公司开发的专业有源滤波器设计软件。TI作为全球知名的半导体和集成电路制造商,其产品线广泛,包括各种模拟和数字解决...

    filter对request请求拦截,对请求参数进行修改

    对request请求进行拦截,... &lt;filter-class&gt;weixin.idea.waiting.cq.controller.JsFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;sqlFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    java 中如何使用filter过滤器

    在Java Web开发中,Filter(过滤器)是一个强大的工具,它允许开发者在数据处理的前后进行拦截和修改。本文将详细介绍如何在Java中使用Filter过滤器,以及如何配置相关的配置文件,让你一目了然。 ### 1. Filter...

    matlab中filter conv impz用法

    在MATLAB中,filter、conv和impz是三个非常重要的函数,它们主要用于信号处理和系统分析。下面将详细解释这三个函数的用法及其在不同情况下的应用。 首先,`filter`函数是基于离散时间差分方程来模拟信号处理的。它...

Global site tag (gtag.js) - Google Analytics