public interface Filter {
void doFilter(Request request,Response response,FilterChain chain);
}
public class HTMLFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.setRequestStr(request.getRequestStr().replace('<', '[').replace('>', ']'));
chain.doFilter(request, response, chain);
response.setResponseStr("-----------HtmlFilter()");
}
}
public class SensitiveFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.setRequestStr(request.getRequestStr().replace("s","js"));
chain.doFilter(request, response, chain);
response.setResponseStr("-----------SensitiveFilter()");
}
}
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter {
List<Filter> filters = new ArrayList<Filter>();
int index = 0;
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;
}
Filter f = filters.get(index);
index++;
f.doFilter(request, response, chain);
}
}
public class Request {
private String requestStr;
public String getRequestStr() {
return requestStr;
}
public void setRequestStr(String requestStr) {
this.requestStr = requestStr;
}
}
public class Response {
private String responseStr="response";
public String getResponseStr() {
return responseStr;
}
public void setResponseStr(String responseStr) {
this.responseStr += responseStr;
}
}
public class TestFilter {
/**
* @param args
*/
public static void main(String[] args) {
String msg = "<script>";
Request request = new Request();
request.setRequestStr(msg);
Response response = new Response();
FilterChain fc = new FilterChain();
fc.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter());
fc.doFilter(request, response, fc);
System.out.println(request.getRequestStr());
System.out.println(response.getResponseStr());
}
}
打印結果:
[jscript]
response-----------SensitiveFilter()-----------HtmlFilter()