1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| public class MyServlet { public static void main(String[] args) { Request request = new Request(); request.str = "request, <script>,我是一名java工程师,我的梦想是做一名架构师"; Response response = new Response(); response.str = "response";
FilterChain chain = new FilterChain(); chain.add(new HTMLFilter()).add(new SensitiveFilter()); chain.doFilter(request, response); System.out.println(request.str); System.out.println(response.str);
} }
class Request { String str; }
class Response { String str; }
interface Filter { void doFilter(Request request, Response response, FilterChain chain); }
class HTMLFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain chain) { request.str = request.str.replaceAll("<", "[").replaceAll(">", "]") + "HTMLFilter()"; chain.doFilter(request, response); response.str += "--HTMLFilter()";
} }
class SensitiveFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain chain) { request.str = request.str.replaceAll("java", "后端") + " SensitiveFilter()"; chain.doFilter(request, response); response.str += "--SensitiveFilter()";
} }
class FilterChain { List<Filter> filters = new ArrayList<>(); int index = 0;
public FilterChain add(Filter f) { filters.add(f); return this; }
public void doFilter(Request request, Response response) { if(index == filters.size()) return; Filter f = filters.get(index); index ++;
f.doFilter(request, response, this); } }
|