- 定义Filter接口,这里定义过滤规则
public interface Filter {
public void doFilter(Request request,Response response,FilterChain chain);
}
- 定义分别定义Request和Response两个实体类,每个类中各有一个静态变量:requestStr和responseStr
- 分别定义SpecialCharacterFilter和SensitiveWordsFilter实现Filter接口,并实现doFilter()
public class SpecialCharacterFilter implements Filter {
/*
* replace the '<' to '[', '>' to ']'
* @see com.lisa.dp.filter.Filter#doFilter(java.lang.String)
*/
@Override
public void doFilter(Request request, Response response,FilterChain chain) {
String returnStr = null;
if(request.requestStr!= null){
request.requestStr = request.requestStr.replace('<', '[').replace('>', ']');
}
chain.doFilter(request, response,chain);
response.responseStr = response.responseStr +"-> SpecialCharacterFilter";
}
}
public class SensitiveWordsFilter implements Filter {
/*
* delete the sensitive words
* @see com.lisa.dp.filter.Filter#doFilter(java.lang.String)
*/
@Override
public void doFilter(Request request, Response response,FilterChain chain) {
if(request.requestStr != null){
request.requestStr = request.requestStr.replace("敏感","");
}
chain.doFilter(request, response,chain);
response.responseStr = response.responseStr +"-> SensitiveWordsFilter";
}
}
注意在这里,除了对request信息做完过滤后,交给chain继续执行,待对request操作完之后,便可实现倒序对response进行过滤
- 那么,这里还有一个FilterChain类,该类同时实现Filter接口,在该类中对Filter chain中的filter进行管理,实际操作filter类
public class FilterChain implements Filter{
List<Filter> filters = new ArrayList<Filter>();
private int index;
public FilterChain addFilter(Filter f){
this.filters.add(f);
return this;
}
@Override
public void doFilter(Request request, Response response,FilterChain chain) {
if(index == filters.size()){
return;
}else{
Filter filter = filters.get(index);
index ++;
filter.doFilter(request, response, chain);
}
}
}
- 最后new Main类,进行测试
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
String filterMsg = new String("大家好:)<script>,敏感,被就业!");
Request req = new Request();
req.setRequestStr(filterMsg);
Response response = new Response();
response.setResponseStr("response");
FilterChain fc = new FilterChain();
fc.addFilter(new SpecialCharacterFilter()).addFilter(new SensitiveWordsFilter());//add filter to filter chain
fc.doFilter(req, response,fc);//filter chain manage and execute the filters
System.out.println("after chain filter: request string = "+req.requestStr);//the final request result
System.out.println("after chain filter: response string = "+response.responseStr);//the final response result
}
}
执行结果:
after chain filter: request string = 大家好:)[script],,被就业!
after chain filter: response string = response-> SensitiveWordsFilter-> SpecialCharacterFilter
可以发现,对fiterMsg依次进行了特殊字符过滤和敏感文字过滤。之后对返回的response进行了敏感文字和特殊字符过滤。