<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 簡介 ![](https://img.kancloud.cn/fa/b3/fab396024db3737439f3ba8114f4a361_419x285.png) 首先任務會先到消息處理器. 消息處理器調用doFilter方法,也就是處理鏈中的doFilter. 處理鏈的doFilter是循環調用它內部的一個個處理類. 處理類的doFilter是詳細處理 ![](https://img.kancloud.cn/c5/1c/c51cecc9c50866739fdeeac1dd73d9c0_380x194.png) ![](https://img.kancloud.cn/39/74/39749c5527517ffe83a857d0d2ff6c00_723x359.png) # 接口 規范實現類 ~~~ public interface Filter { String doFilter(String str); } ~~~ # 具體處理類 ## HtmlFilter ~~~ public class HtmlFilter implements Filter { @Override public String doFilter(String str) { //處理特殊字符 String replace = str.replace('<', '[') .replace('>', ']'); return replace; } } ~~~ ## SesitiveFilte ~~~ public class SesitiveFilte implements Filter { @Override public String doFilter(String str) { //處理敏感字 String r = str.replace("敏感", "**") .replace("不好", "**"); return r; } } ~~~ ## FaceFilter ~~~ public class FaceFilter implements Filter { @Override public String doFilter(String str) { //處理特殊字符 String replace = str.replace(':', '*'); return replace; } } ~~~ # 責任鏈 ~~~ public class FilterChain implements Filter { List<Filter> filters = new ArrayList<Filter>(); //把責任添加進去 public FilterChain addFilter(Filter f) { this.filters.add(f); return this; } @Override public String doFilter(String str) { String r = str; //挨個調用每個filter的處理方法,一直在里面循環直到循環結束 for (Filter filter : filters) { r = filter.doFilter(r); } return r; } } ~~~ # 消息處理程序 這個是啟動責任鏈的程序 ~~~ @Data public class MsgProcessor { //保存消息 private String msg; //保存責任鏈 FilterChain fc; public String process() { return fc.doFilter(msg); } } ~~~ # 主程序 ~~~ String msg = "大家好:), <script>: 敏感詞, 不好"; //初始化消息處理器 MsgProcessor mp = new MsgProcessor(); //把要處理的消息添加進去 mp.setMsg(msg); //初始化,責任鏈 FilterChain fc = new FilterChain(); //添加過濾器,鏈式調用 fc.addFilter(new HtmlFilter()).addFilter(new SesitiveFilte()); //添加子鏈,這個子責任鏈是掛到主責任鏈上面的 FilterChain fc2 = new FilterChain(); fc2.addFilter(new FaceFilter()); //把子鏈添加到責任鏈中 fc.addFilter(fc2); //把責任鏈添加到消息處理器中 mp.setFc(fc); //進行消息處理 String result = mp.process(); System.out.println(result); ~~~ # web中的責任鏈 ![](https://img.kancloud.cn/66/d4/66d4132429eb9ee3d0dde6bd95543b9f_455x263.png) ![](https://img.kancloud.cn/61/ba/61baba9e5af7be4578d41bf65aa159e3_367x490.png) ## Filter接口 ~~~ public interface Filter { //給他請求類和響應類,他來調用責任鏈處理里面的 void doFilter(Request request, Response response, FilterChain filterChain); } ~~~ ## 具體處理 ### FaceFilter ~~~ public class FaceFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain filterChain) { //請求處理特殊字符 String str = request.getRequestStr() .replace(':', '*'); request.setRequestStr(str); filterChain.doFilter(request, response, filterChain); //響應處理的 String responseMsg = response.getResponseStr() + "---FaceFilter"; response.setResponseStr(responseMsg); } } ~~~ ### HtmlFilter ~~~ public class HtmlFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain filterChain) { //請求處理特殊字符 String str = request.getRequestStr() .replace('<', '[') .replace('>', ']'); request.setRequestStr(str); filterChain.doFilter(request, response, filterChain); //響應處理的 String responseMsg = response.getResponseStr() + "---HtmlFilter"; response.setResponseStr(responseMsg); } } ~~~ ### SesitiveFilte ~~~ public class SesitiveFilte implements Filter { @Override public void doFilter(Request request, Response response, FilterChain filterChain) { //請求處理特殊字符 String str = request.getRequestStr() .replace("敏感", "**") .replace("不好", "**"); request.setRequestStr(str); filterChain.doFilter(request, response, filterChain); //響應處理的 String responseMsg = response.getResponseStr() + "---SesitiveFilte"; response.setResponseStr(responseMsg); } } ~~~ ## 責任鏈 ~~~ public class FilterChain implements Filter { List<Filter> filters = new ArrayList<Filter>(); //記錄運行到那個filter上 int index = 0; public FilterChain addFilter(Filter f) { this.filters.add(f); return this; } @Override public void doFilter(Request request, Response response, FilterChain filterChain) { //沒有filter了 if (index == filters.size()) { return; } //取出filter Filter f = filters.get(index); index++; f.doFilter(request, response, filterChain); } } ~~~ ## 消息處理程序 ~~~ @Data public class MsgProcessor { //保存請求 private Request request; //保存響應 private Response response; //保存調用鏈 private FilterChain filterChain; public void process() { //調用責任鏈處理 filterChain.doFilter(this.getRequest(), this.getResponse(), this.getFilterChain()); } } ~~~ ## 主程序 ~~~ //提前準備好請求和響應 Request request = new Request(); Response response = new Response(); String msg = "大家好:), <script>: 敏感詞, 不好"; //請求需要處理的 request.setRequestStr(msg); //響應需要處理的 response.setResponseStr("abc---123"); //初始化消息處理器 MsgProcessor mp = new MsgProcessor(); //把要處理的請求或者響應添加進去 mp.setRequest(request); mp.setResponse(response); //初始化,責任鏈 FilterChain fc = new FilterChain(); //添加過濾器 fc.addFilter(new HtmlFilter()).addFilter(new SesitiveFilte()); //添加子鏈,這個子責任鏈是掛到主責任鏈上面的 FilterChain fc2 = new FilterChain(); fc2.addFilter(new FaceFilter()); //把子鏈添加到責任鏈中 fc.addFilter(fc2); //把責任鏈添加到消息處理器中 mp.setFilterChain(fc); //進行消息處理 mp.process(); System.out.println(request.getRequestStr()); System.out.println(response.getResponseStr()); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看