`
thecloud
  • 浏览: 905801 次
文章分类
社区版块
存档分类
最新评论

Web应用过滤器Fileter

 
阅读更多

在Web应用开发中,我们经常使用过滤器截取从客户端发来的请求,做出相应的处理。过滤器可以说是外部进入网站的第一道关卡。

我们可以利用这道关卡做很多事,例如:对数据进行编码;判断用户是否来自可信任的网络;过滤垃圾数据;记录日志;判断客户端浏览器版本;验证用户是否合法等等……

下图用UML时序图简单画了一下filter的基本原理


一、定义过滤器类,必须实现 java.servlet.Filter接口

实现三个方法:
1、init(FilterConfig filterConfig) 初始化过滤器,在Servlet容器(服务器刚启动时,一般为tomcat启动时)创建过滤器实例的时候就会调用该方法,多用于读取web.xml文件中Servlet过滤器的初始化参数


2、doFilter(ServletRequest request,ServletResponse response,FilterChain chain)进行过滤处理,所有过滤处理都在这个方法中实现

这个方法得到调用后,里面重要的一点是要调用chain.doFilter(request,response)方法,来完成对下一个过滤器doFilter(ServletRequest request,ServletResponse response,FilterChain chain))方法的调用,如果没有下一个过滤器,则把客户请求传给相应的web组件


3、destroy() 过滤器销毁 Servlet容器在销毁过滤器实例之前该方法得到调用,以释放占用的资源

二、在web.xml中配置过滤器

首先声明Filter,指定Filter的名字和实现类,如果有参数,需要配置参数。

实例1、字符编码过滤器

package com.jialin.drp.util.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharsetEncodingFilter implements Filter {
    
	private String encoding;
	
	@Override
	/**
	 * 销毁这个过滤器
	 */
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("销毁过滤器");
	}

	@Override
	/**
	 * 进行过滤处理,所有过滤处理都在这个方法中实现
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("编码过滤器>>>>begin");
		request.setCharacterEncoding(encoding);
		chain.doFilter(request, response);
		System.out.println("编码过滤器>>>>end");
		
	}
	

	@Override
	/**
	 * 是服务器启动时会创建实例,该方法得到调用 
	 */
	public void init(FilterConfig filterConfig) throws ServletException {
		
		//初始化过滤器,获取初始化参数
		this.encoding=filterConfig.getInitParameter("encoding");
		System.out.println("初始化过滤器>>>>>encoding="+encoding);

	}

}


配置文件:

	<filter>
		<filter-name>CharsetEncodingFilter</filter-name>
		<filter-class>com.jialin.drp.util.filter.CharsetEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>GBK</param-value>
		</init-param>

	</filter>

	<filter-mapping>
		<filter-name>CharsetEncodingFilter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>CharsetEncodingFilter</filter-name>
		<url-pattern>/servlet/*</url-pattern>
	</filter-mapping>


说明:CharsetEncodingFilter的filter-mapping中,它的url-pattern为*.jsp,这表示对所有jsp都起作用。/servlet/*表示以/servlet/的所有URL将被过滤。如果为/*表示对所有URL的请求过滤

分享到:
评论

相关推荐

    JAVA Web中过滤器

    通过了解和熟练运用JAVA Web中的过滤器,开发者可以更高效地管理和控制Web应用的输入和输出,提高系统的安全性、稳定性和可维护性。在实际项目中,根据需求合理设计和使用过滤器,能够大大提升应用程序的质量和用户...

    JAVA web过滤器Filter学习资料

    JAVA Web 过滤器 Filter 学习资料 JAVA Web 过滤器 Filter 是一种强大且灵活的工具,用于在服务器上过滤与 servlet 或 JSP 页面相关的请求信息。它提供了多种选择,包括以常规方式调用资源、利用修改后的请求信息...

    过滤器(Filter)

    过滤器可以用来实现诸如登录验证、数据转换、日志记录等功能,为Web应用程序提供了强大的扩展性。 首先,我们需要理解过滤器的基本工作原理。当用户向服务器发送一个请求时,过滤器会按照在web.xml中的配置顺序被...

    过滤器Filter的全面解析

    总的来说,Java Web中的过滤器Filter是一种强大的工具,它可以帮助开发者在不改变原有业务逻辑的情况下,增加额外的功能和控制,提高了代码的可维护性和灵活性。理解并熟练掌握过滤器的使用,对于任何J2EE开发者来说...

    Web应用与开发作业

    实现一个禁止缓存的过滤器。 要求和提示: (1)禁止浏览器缓存所有动态页面; (2)有3个http响应头字段可以禁止浏览器缓存当前页面,它们在Servlet中的示例代码如下。 response.setDateHeader("Expires",-1); ...

    Filter(过滤器)简介和工作原理

    Filter(过滤器)简介和工作原理 Filter 简介 Filter(过滤器)是 Java EE 中的一种组件,用于拦截和处理 Servlet 容器中的请求和响应。Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 ...

    2021-05-28-WebAPI高级应用三--过滤器Filter.rar

    【标题】"2021-05-28-WebAPI高级应用三--过滤器Filter.rar" 提供的主题是关于Web API的高级应用,特别是过滤器(Filter)的使用。在Web API开发中,过滤器是一种强大的工具,用于执行跨多个操作的逻辑,如日志记录、...

    过滤器在Java Web开发中的应用研究.pdf

    随后,随着Servlet 3.0版本的发布,过滤器技术继续获得增强,新特性包括异步处理、注解支持和可插拔性支持等,这些都进一步简化了Java Web应用的开发和部署过程。 过滤器技术的核心是Filter接口,该接口定义了三个...

    web过滤器 c#

    在IT行业中,Web过滤器(Web Filter)是一种用于在Web应用程序中执行特定任务的机制,主要目的是为了增强或改变HTTP请求和响应的处理过程。在C#编程环境下,我们可以使用ASP.NET框架来实现Web过滤器,它对于构建安全...

    java Web项目中过滤器使用方法

    - **初始化**:当Web应用启动时,每个过滤器的`init()`方法会被调用一次,用于设置过滤器的初始状态。 - **过滤**:每当一个请求匹配到过滤器的配置时,`doFilter()`方法会被调用,它接收`ServletRequest`和`...

    过滤器filter和监听器listener的应用总结

    **过滤器Filter** 过滤器是在Servlet规范中定义的一种机制,允许开发者在请求到达目标Servlet或者JSP之前对请求进行拦截处理,也可以在响应发送回客户端之前对响应进行修改。Filter的主要作用包括数据校验、字符...

    JAVA WEB中的Servlet过滤器

    Servlet过滤器是按照指定的配置顺序进行调用的,能够实现数据的预处理、后处理、权限控制、字符编码转换等多种功能,极大地增强了Web应用程序的功能性和灵活性。 Servlet过滤器的实现基于Java Servlet API中的...

    java 中如何使用filter过滤器

    在web应用的`web.xml`配置文件中,我们定义Filter并指定其作用范围: ```xml &lt;filter&gt; &lt;filter-name&gt;myFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.example.MyFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; ...

    过滤器(filter) 例子源码

    在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它允许开发者在请求被处理之前或之后执行一些预定义的任务。...通过理解过滤器的工作原理和实现方式,开发者能够更好地控制和优化Web应用的请求处理流程。

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

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

    spring-boot 过滤器 filter

    在Spring Boot应用中,过滤器(Filter)是用于处理HTTP请求和响应的重要组件。它们允许我们在请求被实际处理之前或之后进行拦截,从而实现诸如日志记录、安全控制、字符编码转换等多种功能。本篇文章将深入探讨...

    Filter过滤器(分类讨论,分类讲解)

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

    servlet过滤器Filter入门

    如果你的 Web 应用需要支持旧版服务器,就不能使用过滤器。 通过本文,我们可以了解到 Servlet 过滤器 Filter 是一个非常强大且标准的机制,能够提供一种模块化的方式来封装公共的行为,并能够对许多不同的资源进行...

    如何配置Filter过滤器处理JSP中文乱码

    【如何配置Filter过滤器处理JSP中文乱码】 在开发Java Web应用时,尤其是在处理包含中文字符的请求时,可能会遇到中文乱码的问题。解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP...

    AngularJS过滤器filter

    **AngularJS过滤器filter详解** AngularJS是一款强大的前端JavaScript框架,用于构建动态Web应用程序。过滤器是AngularJS中一个至关重要的特性,它允许我们在数据展示时进行格式化和转换,从而提升用户体验。过滤器...

Global site tag (gtag.js) - Google Analytics