拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。

  • 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。
  • 过滤器链(Filter Chain) - 过滤器链带有多个过滤器,并在 Target 上按照定义的顺序执行这些过滤器。
  • Target - Target 对象是请求处理程序。
  • 过滤管理器(Filter Manager) - 过滤管理器管理过滤器和过滤器链。
  • 客户端(Client) - Client 是向 Target 对象发送请求的对象。

Filter.java

public interface Filter { // 创建过滤器接口 Filter
    
    public void execute(String request);
    
}

AuthenticationFilter.java

public class AuthenticationFilter implements Filter { // 创建实体过滤器
    
    public void execute(String request){
          System.out.println("Authenticating request: " + request);
       }
    
}

DebugFilter.java

public class DebugFilter implements Filter {
    
    public void execute(String request){
          System.out.println("request log: " + request);
       }
    
}

Target.java

public class Target { //创建 Target
    
    public void execute(String request){
          System.out.println("Executing request: " + request);
       }
    
}

FilterChain.java

import java.util.ArrayList;
import java.util.List;

public class FilterChain { //创建过滤器链
    
    private List<Filter> filters = new ArrayList<Filter>();
       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;
       }
    
}

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);
       }
    
}

Client.java

public class Client { //创建客户端 Client
    
    FilterManager filterManager;
    
       public void setFilterManager(FilterManager filterManager){
          this.filterManager = filterManager;
       }
    
       public void sendRequest(String request){
          filterManager.filterRequest(request);
       }
    
}

InterceptingFilterDemo.java

public class InterceptingFilterDemo { //使用 Client 来演示拦截过滤器设计模式
    
    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");
       }
    
}

Java拦截过滤器模式相关推荐

  1. java filter 模式,Java设计模式----过滤器模式(挑三拣四)

    过滤器模式 描述 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理.定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上.过 ...

  2. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述

    过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...

  3. java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...

  4. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求 Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断 ...

  5. Java设计模式学习总结(9)——结构型模式之过滤器模式(标准模式)

    过滤器模式( Filter Pattern )或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这 ...

  6. 如何创建 Java Servlet 过滤器

    Java servlet 过滤器是 Java Web 应用程序的基本组件,因为过滤器允许程序员拦截请求并转换响应以用于各种目的.即使您不创建任何过滤器,servlet 容器(如 Tomcat)和 We ...

  7. 区分Java拦截器和过滤器

    今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...

  8. java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高

    java拦截器项目应用 在开发具有某些性能要求的Java EE应用程序时,必须在每个发行版之前验证是否满足这些要求. 您可能会想到,哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量. ...

  9. 设计模式 过滤器模式

    过滤器模式(Filter Pattern)或标准模式(Criteria Pattern) 是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种 ...

最新文章

  1. ssh免密码登录的原理
  2. Debian+Pure-ftpd+MySQL+User manager for PureFTPd
  3. POJ 3855 计算几何·多边形重心
  4. shell预定义变量
  5. 三菱fx5u编程手册_实用分享 | 三菱FX 5U特点是什么?
  6. 地址总线是单向还是双向_三端双向交流开关(TRIAC)
  7. neditor 自定义工具栏配置
  8. 数据传输完整性_电缆监测数据传输系统分析与设计
  9. virtualbox禁用硬件虚拟化_Mac版Virtualbox6.1开启嵌套虚拟化
  10. 图像分类_PyTorch图像数据分类
  11. 周立功的linux开发板例程,USB NXP LPC1766 开发配套例程(周立功开发板自带例程) - 下载 - 搜珍网...
  12. JQuery - Animate
  13. 前后端分离登录验证功能实现案例
  14. 怎么可以修改pr基本图形中的文字_视频剪辑 | pr的简单教学
  15. m2增长率曲线_中国m2历年数据曲线图_中国m2历年数据
  16. Markdown设置自动生成目录及序号分级标准
  17. python爬虫之三 —— 淘宝评论
  18. 从互联网大佬到田间养猪,佛系丁磊从未躺平
  19. CTE6备考与考试感悟
  20. javascript大全

热门文章

  1. PE文件和COFF文件格式分析——签名、COFF文件头和可选文件头2
  2. Windows和Linux下通用的线程接口
  3. 设计模式之备忘录模式(Memento)摘录
  4. linux驱动:i2c驱动(二)
  5. ajax data参数没有值,ajax $.get的data参数无法传递
  6. MyBatis复习笔记2:配置文件详解
  7. 0基础学好python难不难_零基础学习Python难不难?Python有什么优势?
  8. Java代码块总结(速读版)
  9. 3des java 库_java 3DES 加密
  10. linux怎么创建牡蛎_文件amp;目录小技巧 | Linux后门系列