- 定义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进行了敏感文字和特殊字符过滤。
相关推荐
设计模式之责任链模式源码 设计模式之责任链模式源码 设计模式之责任链模式源码
设计模式之责任链模式Java版本实现和UML类图设计
java设计模式之责任链模式,从实际生活入手说明责任链模式的原理。
23种设计模式之责任链模式对责任链模式进行了简单的介绍,并附带了例子程序,和大家分享
一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...
这个资源就是让你掌握责任链模式的原理和运用,你值得拥有,好好学习,天天向上。
责任链模式(Chain) 用意:避免请求发送者与接受者耦合在一起,让多个对象连接成一条链,并且沿关这条链传递请求,直至有对象处理他为止。
NULL 博文链接:https://stelin.iteye.com/blog/932101
本文实例讲述了JavaScript设计模式之责任链模式。分享给大家供大家参考,具体如下: 介绍 责任链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将...
本文实例讲述了JS设计模式之责任链模式。分享给大家供大家参考,具体如下: 责任链设计模式: 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象...
本文实例讲述了Android编程设计模式之责任链模式。分享给大家供大家参考,具体如下: 一、介绍 责任链模式(Iterator Pattern),是行为型设计模式之一。什么是”链“?我们将多个节点首尾相连所构成的模型称为链,...
主要介绍了JAVA设计模式之责任链模式详解,需要的朋友可以参考下
【设计模式】之责任链模式责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果
设计模式之责任链模式,使用形象化例子来解释说明。
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
主要介绍了Java经典设计模式之责任链模式,简单说明了责任链模式的概念、原理,并结合实例形式分析了java实现责任链模式的具体用法与相关注意事项,需要的朋友可以参考下
主要介绍了Java设计模式之责任链模式(Chain of Responsibility模式)介绍,本文讲解了如何使用责任链模式,并给出了4种使用实例,需要的朋友可以参考下
今天小编就为大家分享一篇关于Java设计模式之责任链模式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧