例子:
第一步:新建一个Filter接口
package filter;
/**
* 拦截器接口
* @author Administrator
* @version 1.0.0
*/
public interface Filter {
public void dofilter(Request resquest,Response response,FilterChain filterChain);
}
第二步:新建具体的Filter实现方法
新建一个FilterChain类,这个类就是一个类似一个领导,同一个ScriptFilter,HtmlFilter;
package filter;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter{
private int index;
List<Filter> list = new ArrayList<>();
public FilterChain add(Filter filter){
list.add(filter);
return this ;
}
@Override
public void dofilter(Request resquest, Response response, FilterChain filterChain) {
if(index==list.size()) return;
Filter f = list.get(index);
index++;
f.dofilter(resquest,response,filterChain);
}
}
package filter;
public class HtmlFilter implements Filter{
@Override
public void dofilter(Request resquest, Response response, FilterChain filterChain) {
resquest.reqmsg = resquest.reqmsg.replace("<", "[").replace(">", "]") + "---HTMLFilter()";
filterChain.dofilter(resquest, response, filterChain);
response.resmsg += "---HTMLFilter()";
}
}
package filter;
public class ScriptFilter implements Filter{
@Override
public void dofilter(Request resquest, Response response, FilterChain filterChain) {
resquest.reqmsg = resquest.reqmsg.replace("你妹", "").replace("你大爷", "") + "---ScriptFilter()";
filterChain.dofilter(resquest, response, filterChain);
response.resmsg += "---ScriptFilter()";
}
}
第三步:新建一个Main类了,这样子就可以实现类似struts2拦截器的功能了;就是类似从左往右请求,然后又从右往左响应。
package filter;
public class Main {
public static void main(String[] args) {
String str = "good ,你妹,讨厌你,我学到责任链模式;<script>dddd";
Request request = new Request();
request.setReqmsg(str);
Response response = new Response();
response.setResmsg("response");
FilterChain fc = new FilterChain();
HtmlFilter hf= new HtmlFilter();
ScriptFilter sf= new ScriptFilter();
//由于add方法的返回值为this对象(自身对象),所以可以连续调用
fc.add(hf).add(sf);
fc.dofilter(request, response, fc);
System.out.println(request.reqmsg);
System.out.println(response.resmsg);
}
}
附加:
package filter;
public class Request {
public String reqmsg;
public String getReqmsg() {
return reqmsg;
}
public void setReqmsg(String reqmsg) {
this.reqmsg = reqmsg;
}
}
package filter;
public class Response {
public String resmsg;
public String getResmsg() {
return resmsg;
}
public void setResmsg(String resmsg) {
this.resmsg = resmsg;
}
}