
直接上代码Filter.java
public interface Filter {
//过滤器
public void doFilter(Request request,Response response,FilterChain chain); }
FilterChain.java
public class FilterChain {
//存放所有的过滤器
private List<Filter> filters ;
//记录当前过滤索引
private int index;
//过滤链初始化
public FilterChain()
{
filters = new ArrayList<Filter>(10);
} public void addFilter(Filter filter)
{
filters.add(filter);
}
/**
* 迭代过滤
*/
public void doFilter(Request request,Response response)
{
if ( index >= filters.size() )
return;
filters.get( index++ ).doFilter(request, response, this);
} }
Request.java
public class Request { private String value; public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} @Override
public String toString() {
return this.value;
} }
Response.java
public class Response { private String value; public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} @Override
public String toString() {
return this.value;
} }
FilterOne.java
public class FilterOne implements Filter{ /**
* 过滤FUCK字符
*/
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
System.out.println("进入过滤器FilterOne---------------------------------------");
//执行下一个过滤器
chain.doFilter(request, response); System.out.println("出去过滤器FilterOne---------------------------------------");
} }
FilterTwo.java
public class FilterTwo implements Filter{ @Override
public void doFilter(Request request, Response response, FilterChain chain) {
System.out.println("进入过滤器FilterTwo---------------------------------------");
//执行下一个过滤器
chain.doFilter(request, response); System.out.println("出去过滤器FilterTwo---------------------------------------");
} }
Test.java
public class Test { public static void main(String[] args) {
FilterChain chain = new FilterChain();
chain.addFilter(new FilterOne());
chain.addFilter(new FilterTwo());
chain.doFilter(new Request(), new Response() );
} }
运行结果
进入过滤器FilterOne---------------------------------------
进入过滤器FilterTwo---------------------------------------
出去过滤器FilterTwo---------------------------------------
出去过滤器FilterOne---------------------------------------