责任链模式:spring AOP源码中使用的就是责任链模式。它是有一系列的过滤器组成,可以灵活的停止某个过滤器。
public interface Filter { boolean doFilter(Request request, Response response, FilterChain chain); } public class HTMLFilter implements Filter{ @Override public boolean doFilter(Request request, Response response,FilterChain chain) { String reqstr=request.getMsg(); reqstr=reqstr.replace("<","["); reqstr=reqstr.replace(">","]"); request.setMsg(reqstr); chain.doFilter(request,response,chain); response.setMsg(response.getMsg()+"---HTMLFilter"); return true; } } public class SensitiveFilter implements Filter{ @Override public boolean doFilter(Request request, Response response, FilterChain chain) { String reqstr=request.getMsg(); reqstr=reqstr.replace("996","955"); request.setMsg(reqstr); chain.doFilter(request,response,chain); response.setMsg(response.getMsg()+"---SensitiveFilter"); return true; } } public class Request { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } public class Response { private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } public class FilterChain implements Filter{ List<Filter> list=new ArrayList<Filter>(); Integer index=0; public FilterChain add(Filter filter){ list.add(filter); return this; } @Override public boolean doFilter(Request request, Response response, FilterChain chain) { if(index==list.size()){ return false; } Filter f=list.get(index); index++; return f.doFilter(request,response,chain); } } public class Main { public static void main(String[] args) { String msg="欢迎访问:你好<script>^V^996,jiujiayi.com"; Request request=new Request(); request.setMsg(msg); Response response=new Response(); String respstr=response.getMsg(); FilterChain chain=new FilterChain(); chain.add(new HTMLFilter()).add(new SensitiveFilter()); chain.doFilter(request,response,chain); System.out.println(request.getMsg()); System.out.println(response.getMsg()); } }
原文:https://www.cnblogs.com/zhaoyangxuan/p/14862154.html