主要思想是:
1、首先定义一个接口Filter,以后要实现具体过滤器的类都要实现这个就接口
2、定义个类叫Filterchain,也实现Filter接口,这个类可以添加具体的Filter类
Filter.java
package com.sunsheng.filter;
public interface Filter {
void doFilter(Request request, Response response, FilterChain chain);
}
FilterChain.java
package com.sunsheng.filter;
import java.util.LinkedList;
public class FilterChain implements Filter {
private LinkedList<Filter> list = new LinkedList<Filter>();
public void addFillter(Filter filter) {
list.add(filter);
}
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
if (list.isEmpty())
return;
Filter filter = list.removeFirst();
filter.doFilter(request, response, chain);
}
}
两个简单处理内容的过滤器\
package com.sunsheng.filter;
public class EscapeHTMLFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
//对获得数据进行正常的过滤或拦截处理
String content = request.getContent().replace("<", "[").replace(">", "]");
content += "EscapeHTMLFilter";
request.setContent(content);
//非常重要,调用过滤链的doFilter方法使得下一个Filter继续执行
chain.doFilter(request, response, chain);
//对输出的数据进行
content = response.getContent();
content += "EscapeHTMLFilter";
response.setContent(content);
}
}
package com.sunsheng.filter;
public class UrlFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
String content = request.getContent().concat("SESSIONID=FD45NRKJ34TY7F34FT7");
content += "UrlFilter";
request.setContent(content);
chain.doFilter(request, response, chain);
content = response.getContent();
content += "UrlFilter";
response.setContent(content);
}
}
模拟的requset和response对象
package com.sunsheng.filter;
public class Request {
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
package com.sunsheng.filter;
public class Response {
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
测试代码
package com.sunsheng.filter;
import org.junit.Test;
public class FilterChainTest {
@Test
public void test() {
Request req = new Request();
Response resp = new Response();
req.setContent("<Request>");
resp.setContent("<Response>");
FilterChain filterChain = new FilterChain();
filterChain.addFillter(new EscapeHTMLFilter());
filterChain.addFillter(new UrlFilter());
filterChain.doFilter(req, resp, filterChain);
System.out.println(req.getContent());
System.out.println(resp.getContent());
}
}