IFilter:
package com.rain.filter;
public interface IFilter {
void doFilter(Request request,Response response,FilterChain chain);
}
HtmlFilter:
package com.rain.filter;
public class HtmlFilter implements IFilter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.setRequestStr(request.getRequestStr().replaceAll("<", "[")
.replaceAll(">", "]")+ "HtmlFilter, ");
chain.doFilter(request, response, chain);
response.setResponseStr(response.getResponseStr()+"HtmlFilter, ");
}
}
FaceFilter:
package com.rain.filter;
public class FaceFilter implements IFilter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.setRequestStr(request.getRequestStr().replaceAll("笑脸", "^-^")+ "FaceFilter, ");
chain.doFilter(request, response, chain);
response.setResponseStr(response.getResponseStr() + "FaceFilter, ");
}
}
SensitiveFilter:
package com.rain.filter;
public class SensitiveFilter implements IFilter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.setRequestStr(request.getRequestStr().toLowerCase().replaceAll("fuck", "和谐")+"SensitiveFilter, ");
chain.doFilter(request, response, chain);
response.setResponseStr(response.getResponseStr()+"SensitiveFilter, ");
}
}
Request:
package com.rain.filter;
public class Request {
private String requestStr;
public Request(String requestStr) {
super();
this.requestStr = requestStr;
}
public String getRequestStr() {
return requestStr;
}
public void setRequestStr(String requestStr) {
this.requestStr = requestStr;
}
}
Response:
package com.rain.filter;
public class Response {
private String responseStr;
public Response(String responseStr) {
super();
this.responseStr = responseStr;
}
public String getResponseStr() {
return responseStr;
}
public void setResponseStr(String responseStr) {
this.responseStr = responseStr;
}
}
FilterChain:
package com.rain.filter;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements IFilter{
private List<IFilter> filterList=new ArrayList<IFilter>();
private int index=0;
public FilterChain addFilter(IFilter filter){
this.filterList.add(filter);
return this;
}
public void doFilter(Request request, Response response,FilterChain chain) {
if(index==filterList.size())
return;//如果链条里没有filter或是链条里的filter都调用过了(有点象递归)
filterList.get(index++).doFilter(request, response, chain);
}
}
Test:
package com.rain.filter;
public class Test {
public static void main(String[] args) {
String requestStr="requesr:<Scrip>,fuck ,笑脸";
String responseStr="response:";
FilterChain chain=new FilterChain();
FilterChain chain1=new FilterChain();
chain1.addFilter(new FaceFilter());
//链式调用
chain.addFilter(new HtmlFilter())
.addFilter(new SensitiveFilter())
.addFilter(chain1);//链条里面可以嵌套链条因为过滤器链条也实现了Ifilter接口也是过滤器
Request request=new Request(requestStr);
Response response=new Response(responseStr);
chain.doFilter(request, response, chain);
System.out.println(request.getRequestStr());
System.out.println(response.getResponseStr());
}
}