拦截过滤器模式(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. ACdream 1224 Robbers (贪心)
  2. python怎么编辑文件夹_python创建修改文件
  3. SAP 中国本地化内容汇总
  4. 查询 oracle_ORACLE数据库查询语句
  5. python中文词云图代码_Python简单实现词云图代码及步骤解析
  6. 大数据_Hbase-Filter 索引(优化)_根据column查询---Hbase工作笔记0020
  7. node.js 报错Error: ENFILE: file table overflow...ENFILE: file table overflow, open...
  8. cogs 315. [POJ3255] 地砖RoadBlocks
  9. 《Spring实战(第5版)》Spring in Action, Fifth Edition 官方在线阅读及源码下载
  10. 达梦8用户和角色管理
  11. Postman如何设置成中文?(汉化)
  12. 显卡的优化以提高计算机性能作用,Win10显卡硬件加速如何使用 Win10优化显卡让游戏性能最佳的详细步骤...
  13. 我的2017,五味杂陈
  14. 转:com组件纯C++创建
  15. 整理一下虚拟化与Linux的学习经历
  16. 【ceph】Admin Socket机制|ceph dump 命令原理
  17. 计网核心总结(测试开发面试常问题目)
  18. SpringMVC文件上传功能MultipartFile参数为空
  19. python千年虫问题enumerate函数
  20. QPS从0到4000请求每秒,谈达达后台架构演化之路

热门文章

  1. 用好ASP.NET 2.0的URL映射
  2. 【Qt】Qt再学习(六):Qt中JSON保存和加载的示例
  3. linux驱动:TI+DM8127+GPIO(一)之应用——报警输入输出
  4. java备忘录模式应用场景_图解Java设计模式之备忘录模式
  5. 杭电acm1004java答案_水过杭电OJ hdu1004
  6. jsp java数据,jsp怎么遍历数据
  7. linux挂载移动硬盘 格式化_linux系统下如何挂载NTFS移动硬盘
  8. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...
  9. Java项目:在线美食网站系统(java+SSM+jsp+mysql+maven)
  10. 【win】黑框中常用的命令