zoukankan      html  css  js  c++  java
  • 拦截过滤器模式

    拦截过滤器模式

    用于对应用程序的请求或响应做一些预处理/后处理。

    定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。

    过滤器可以做认证,授权,记录日志或者跟踪请求,然后把请求传给相应的处理程序。

    过滤器(filter)   过滤器在请求处理请求程序执行请求之前或之后,执行某些任务

    过滤器链(filter chain) 过滤器链带有多个过滤器,并在Target上按照定义的顺序执行这些过滤器

    Target  Target对象时请求处理对象

    过滤管理器(filter Manager)  过滤器管理过滤器和过滤器链

    客户端(client)Client是向Target对象发送请求的对象

    实现

    我们将创建 FilterChain、FilterManager、Target、Client 作为表示实体的各种对象。AuthenticationFilter 和 DebugFilter 表示实体过滤器。

    InterceptingFilterDemo,我们的演示类使用 Client 来演示拦截过滤器设计模式。

    图片



    步骤 1

    创建过滤器接口 Filter。

    Filter.java

    public interface Filter {

       void execute(String request);

    }
    步骤 2

    创建实体过滤器。

    AuthenticationFilter.java

    public class AuthenticationFilter implements Filter {

       @Override
       public void execute(String request){
           System.out.println("Authenticating request: " + request);
      }

    }
    DebugFilter.java

    public class DebugFilter implements Filter {

       @Override
       public void execute(String request){
           System.out.println("request log: " + request);
      }

    }
    步骤 3

    创建 Target。

    Target.java

    */
    public class Target {

       public void execute(String request){
           System.out.println("Executing request: " + request);
      }

    }
    步骤 4

    创建过滤器链。

    FilterChain.java

    public class FilterChain {

       private List<Filter> filters = new ArrayList();
       private Target target;

       public void addFilter(Filter filter){
           filters.add(filter);
      }

       public void execute(String request){
           for (Filter filter : filters) {
               filter.execute(request);
          }
           target.execute(request);
      }

       public void setTarget(Target target){
           this.target = target;
      }

    }
    步骤 5

    创建过滤管理器。

    FilterManager.java

    public class FilterManager {

       FilterChain filterChain;

       public FilterManager(Target target){
           filterChain = new FilterChain();
           filterChain.setTarget(target);
      }
       public void setFilter(Filter filter){
           filterChain.addFilter(filter);
      }

       public void filterRequest(String request){
           filterChain.execute(request);
      }

    }
    步骤 6

    创建客户端 Client。

    Client.java

    public class Client {

       FilterManager filterManager;

       public void setFilterManager(FilterManager filterManager){
           this.filterManager = filterManager;
      }

       public void sendRequest(String request){
           filterManager.filterRequest(request);
      }

    }
    步骤 7

    使用 Client 来演示拦截过滤器设计模式。

    InterceptingFilterDemo.java

    public class InterceptingFilterPatternDemo {

       public static void main(String[] args) {
           FilterManager filterManager = new FilterManager(new Target());
           filterManager.setFilter(new AuthenticationFilter());
           filterManager.setFilter(new DebugFilter());

           Client client = new Client();
           client.setFilterManager(filterManager);
           client.sendRequest("HOME");
      }

    }
    步骤 8

    验证输出。

    Authenticating request: HOME
    request log: HOME
    Executing request: HOME

  • 相关阅读:
    【大数据云原生系列】大数据系统云原生渐进式演进最佳实践
    Apache Flink on K8s:四种运行模式,我该选择哪种?
    Istio 运维实战系列(2):让人头大的『无头服务』-上
    istio 常见的 10 个异常
    Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
    腾讯会议大规模使用Kubernetes的技术实践
    腾讯云推出云原生etcd服务
    Regionals 2014 Asia
    HDU1754 I Hate It splay
    HNOI2002 营业额统计 splay
  • 原文地址:https://www.cnblogs.com/lixiaoxu695022762/p/15265979.html
Copyright © 2011-2022 走看看