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

简单使用Filter模拟Servlet中的过滤器

阅读更多

涉及到的类:

1:Request.java              负责请求信息

2:Response.java           负责返回信息的处理

3:FilterChain.java          过滤器链

4:Filter.java                  过滤器接口类

5:HtmlFilter.java           html字符特殊字符过滤器

6:SensitiveFilter.java   敏感字符的过滤器

7:Main.java                 模拟程序的客户端测试程序

下面分别依次看代码:

 

Request.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy
 * 请求对象
 */
public class Request {
	String requestString;

	public String getRequestString() {
		return requestString;
	}

	public void setRequestString(String requestString) {
		this.requestString = requestString;
	}

}

 

Response.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy
 * 响应对象
 */
public class Response {
	String responseString;

	public String getResponseString() {
		return responseString;
	}
	public void setResponseString(String responseString) {
		this.responseString = responseString;
	}

}

 

 FilterChain.java

package com.gd.filter.web;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author Sandy
 * 过滤器链
 */
public class FilterChain implements Filter {
	List<Filter> filters = null;

	int index = 0;

	public FilterChain() {
		super();
		filters = new ArrayList<Filter>();
	}

	/*往filter链中添加一个过滤器,这里用到了个一个技巧就是返回this对象,这样可以实现添加完成一个
	 *过滤器链后,还可以紧接着添加下一个filter
	 *this.add(filter1).add(filter2)的方式
	 */
	public FilterChain add(Filter filter) {
		this.filters.add(filter);
		return this;
	}
	//过滤方法
	public void doFilter(Request request, Response response, FilterChain chain) {
		if (index == filters.size())
			return;
		Filter filter = filters.get(index);
		index++;
		filter.doFilter(request, response, chain);
	}
}

 Filter.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy
 * 创建一个Filter接口
 */

public interface Filter {
	void doFilter(Request  request,Response  responses,FilterChain chain);

}

 HtmlFilter.java

package com.gd.filter.web;

/**
 * 
 * @author Sandy 
 * html中特殊字符替换过滤器
 */
public class HtmlFilter implements Filter {

	public void doFilter(Request request, Response response, FilterChain chain) {

		request.requestString = request.requestString.replace("<", "[")
				.replace(">", "]")
				+ "------HtmlFilter()";
		chain.doFilter(request, response, chain);
		response.responseString += "-------------+HtmlFilter()";
	}

}

 SensitiveFilter.java  

package com.gd.filter.web;

/**
 * @author Sandy 
 * 替换敏感字符的过滤器
 */
public class SensitiveFilter implements Filter {
	public void doFilter(Request request, Response response, FilterChain chain) {
		request.requestString = request.requestString.replace("被抓住", "抓住")
				.replace("被扣留", "扣留")
				+ "----------SensitiveFilter()";
		chain.doFilter(request, response, chain);
		response.responseString += "SensitiveFilter()";
	}
}

  Main.java

package com.gd;

import com.gd.filter.web.FilterChain;
import com.gd.filter.web.HtmlFilter;
import com.gd.filter.web.Request;
import com.gd.filter.web.Response;
import com.gd.filter.web.SensitiveFilter;

/**
 * 
 * @author Sandy
 * 主客户端测试程序
 */
public class Main {

	/**
	 * @param args
	 */
	public static final String NEW_STRING = "<javaSrcipt>,被抓住,被扣留";

	public static void main(String[] args) {
		Request request = new Request();
		request.setRequestString(NEW_STRING);
		Response response = new Response();
		response.setResponseString("response--------");
		FilterChain chain = new FilterChain();
		chain.add(new HtmlFilter()).add(new SensitiveFilter());
		chain.doFilter(request, response, chain);
		System.out.println(request.getRequestString());
		System.out.println(response.getResponseString());

	}

}

 

附件中是完整的模拟servlet的filter

 

0
0
分享到:
评论

相关推荐

    Servlet简单模拟Struts2

    为了达到类似Struts2的效果,我们可以创建一个Servlet过滤器(Filter),在`doFilter`方法内进行请求的初步处理和转发。过滤器可以注册到web.xml文件中,对特定URL路径或所有请求进行拦截。 2. **解析自定义XML数据...

    Servlet+IO的一个简单的模拟购物车程序

    这个程序模拟了用户从浏览商品到完成支付的整个购物流程,同时也涵盖了Servlet的分层架构、监听器(Listener)和过滤器(Filter)的运用。下面我们将详细讨论这些关键知识点。 1. **Servlet**: Servlet是Java EE...

    WAS 6.0.2.9 部署应用使用过滤器问题解决办法

    针对描述中提到的“过滤器问题测试程序”,可能是一个测试项目,用于模拟和调试过滤器问题。这个名为`mytest`的压缩包文件可能包含了测试代码、日志文件、或者用于复现问题的配置文件。分析这些文件可以帮助我们定位...

    过滤器进行登录操作

    过滤器是通过实现javax.servlet.Filter接口并配置在web.xml文件中来创建的。 对于"过滤器进行登录操作",我们主要关注以下几点: 1. **过滤器链**:多个过滤器可以组成一个过滤器链,每个过滤器按照在web.xml中的...

    Filter模式-2013-8-9

    首先,Filter模式的核心概念是过滤器链。一个过滤器可以执行某些操作,如验证、转换或添加额外信息,然后将请求传递给下一个过滤器,直到请求到达目标资源。返回时,响应也会经过相同的过滤器链,每个过滤器都可以对...

    java web Xss及sql注入过滤器.zip

    5. **单元测试和集成测试**:为了确保过滤器和SQL注入防护的有效性,项目可能包含了一些测试用例,使用JUnit和Mockito等工具模拟请求和数据库交互,验证安全措施是否正常工作。 总之,这个项目提供了预防XSS和SQL...

    springboot+jsp 使用过滤器.do

    在这个例子中,`.do`后缀表明过滤器可能与Struts的Action请求关联,或者是在模拟这种请求模式。过滤器可以用来实现如登录验证、GZIP压缩、字符编码转换、日志记录等多种功能。 **4. Maven** Maven是Java项目管理...

    spring过滤器

    在Spring框架中,我们通常使用DelegatingFilterProxy来整合Spring的AOP(面向切面编程)功能与Servlet过滤器。 1. **DelegatingFilterProxy**: 这是Spring提供的一个特殊Filter,它的主要作用是将过滤器的职责委托...

    JSP登陆注册增删改查过滤器

    4. **过滤器(Filter)**:在Java Web应用中,过滤器是Servlet规范的一部分,它可以在请求到达目标Servlet或JSP之前对其进行拦截和处理。过滤器常用于身份验证、数据校验、字符编码转换、日志记录等。在“JSP登陆...

    Filter进行权限控制

    在Java Web开发中,`Filter`(过滤器)是一个强大的工具,它允许开发者在请求被实际处理之前或之后执行特定的逻辑。在这个场景中,"Filter进行权限控制"指的是使用`Filter`来实现用户访问权限的管理,确保只有登录后...

    cas无过滤器 j2ee系统接入示例

    这个示例提供的代码工程中,关键在于`CasValidate`类,它是实现无过滤器CAS验证的核心。`CasValidate`类会模拟Filter的功能,负责与CAS服务器通信,验证用户的身份。当你导入工程到Eclipse并运行后,可以观察`main ...

    名为责任链或者拦截器或者过滤器的简单模拟

    以及最早学习到的java web中的javax.servlet.Filter的概念, 都是一种链式的处理流程,这一个环节处理完成,然后处理另一个环节,这样就可以在一个处理本身的之前和之后做一些事情了。 比如说,struts2中Action在...

    JAVA网上商城-servlet运用

    7. **过滤器(Filter)** - 项目可能使用了Servlet Filter来实现一些预处理或后处理功能,比如登录检查、字符编码转换等。 8. **部署描述符(web.xml)** - 配置Servlet、Filter和其他组件的配置文件,定义...

    java web自动登陆和乱码过滤器

    在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,如身份验证、字符编码转换等。"java web自动登陆和乱码过滤器"的主题主要涵盖两个核心知识点:自动登录...

    Filter

    标题中的"Filter"一词在IT领域通常指的是过滤器或者拦截器的概念,它在软件开发中扮演着重要的角色,尤其是在Web开发、数据处理和网络通信等场景。在Java Web开发中,Servlet Filter是用于处理HTTP请求和响应的一种...

    模拟Struts2拦截器代码

    过滤器通过实现`javax.servlet.Filter`接口并在`web.xml`中配置来实现。然而,Struts2的拦截器是框架级别的,作用于Action级别,更加灵活且易于扩展。 总之,模拟Struts2拦截器涉及创建自定义拦截器类、注册和配置...

    web系统与技术--实验十一[文].pdf

    实验十一主要讲解了Servlet过滤器的使用,这是Web开发中的一个重要概念,主要用于在请求到达目标资源之前和响应返回客户端之后进行拦截和处理。过滤器可以用来进行数据验证、日志记录、字符编码转换等操作。 一、...

    Struts2之Servlet API及单元测试初识案例struts005

    1. **过滤器(Filter)**:Struts2的核心过滤器`StrutsPrepareAndExecuteFilter`负责初始化Action上下文,处理请求并执行Action。它会解析请求参数,根据配置文件确定Action,然后调用Action的execute方法。 2. **...

    web验证码项目源码

    总的来说,"web验证码项目源码"是一个实用的教学示例,它涵盖了验证码生成、显示、验证以及使用Servlet过滤器进行流程控制的关键技术。对于初学者来说,这是一个很好的学习Web安全和Servlet过滤器机制的起点。通过...

Global site tag (gtag.js) - Google Analytics