package com.otg.jason.filter.old; /** * Created by jason.guan on 2017/7/16. */ public class FilterProcessor { String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String process(){ //process html tag String r = msg.replace("<", "[") .replace(">", "]"); //process the sensitive words r=r.replace("敏感", "XXXX"); return r; } }
package com.otg.jason.filter.old; /** * Created by jason.guan on 2017/7/16. */ public class FilterProcessorTest { /** * @param args */ public static void main(String[] args) { String msg = "<html>,敏感信息,大家可以看见吗"; FilterProcessor filterProcessor = new FilterProcessor(); filterProcessor.setMsg(msg); String result = filterProcessor.process(); System.out.println(result); } }
[html],XXXX信息,大家可以看见吗
通过FilterProcessor的process对信息进行过滤,一旦发生新的需求,我们不得不修养这个方法,这就违背了对修改关闭,对扩张开发的设计思想,那么怎么办呢?
package com.otg.jason.filter; /** * Created by jason.guan on 2017/7/16. */ public interface Filter { void doFilter(Request request, Response response, FilterChain chain); }
package com.otg.jason.filter; import java.util.ArrayList; import java.util.List; /** * Created by jason.guan on 2017/7/16. */ public class FilterChain implements Filter { List<Filter> filters = new ArrayList<Filter>(); int index = 0; public FilterChain addFilter(Filter f) { this.filters.add(f); return this; } public void doFilter(Request request, Response response, FilterChain chain) { if(index == filters.size()) return ; Filter f = filters.get(index); index ++; f.doFilter(request, response, chain); } }
分化了各个校验规则,提高了可扩展性.我们要实现链条的拼接,其实我们想想,一个Filter链条本身就是一个Filter,所以我们使用FilterChain来模拟Filter链条,并且实现了Filter接口,
package com.otg.jason.filter; /** * Created by jason.guan on 2017/7/16. */ public class SesitiveFilter implements Filter { public void doFilter(Request request, Response response, FilterChain chain) { String requestStr = request.getRequestStr(); String responseStr = requestStr.replace("敏感", "XXXX"); request.setRequestStr(responseStr); response.setResponseStr(response.getResponseStr()+","+responseStr); chain.doFilter(request, response, chain); } }
这样我们的Filterchain不仅可以添加一个个Filter,还能直接添加Filter链条,现在的问题是如何让我们的Filter也可以处理返回的信息呢?
package com.otg.jason.filter; /** * Created by jason.guan on 2017/7/16. */ public class FilterMainTest { /** * @param args */ public static void main(String[] args) { String msg = "<html>,敏感信息,大家可以看见吗"; Request request = new Request(); request.setRequestStr(msg); Response response = new Response(); response.setResponseStr("response"); FilterChain fc = new FilterChain(); fc.addFilter(new HTMLFilter()) .addFilter(new SesitiveFilter()); fc.doFilter(request, response, fc); System.out.println(request.getRequestStr()); System.out.println(response.getResponseStr()); } }
要想让我们的Filter可以处理返回信息,很自然的想到让一个Filter去调用另外一个Filter,等到最后一个Filter返回,其余的也逐个返回,这里要完成这一过程,增加了
一个参数FilterChain,FilterChain里面记录了当前过滤器索引,巧妙的完成了一个Filter调用另外一个Filter的需求
相关推荐
过滤器模式,又称为Criteria模式或Specification模式,是一种在软件设计中常见的行为设计模式,它主要用来封装一系列的条件判断,使复杂的查询过程简化。在iOS开发中,过滤器模式可以用于处理数据筛选,比如在App中...
### 拦截过滤器模式详解 #### 一、概述 **拦截过滤器模式(Intercepting Filter Pattern)**是一种软件设计模式,主要用于对应用程序的请求或响应进行预处理或后处理。它允许我们在请求到达目标组件之前或响应离开...
Java中的拦截过滤器模式是一种强大的设计模式,允许高效地处理Web请求。该模式支持在过滤器链中应用多个过滤器来处理和修改请求和响应。 ## 二、详细解释及实际示例 1. **实际示例**: - 考虑进入一个安全的办公...
Java 过滤器模式详解 Java 过滤器模式(Filter Pattern)是一种常用的设计模式,用于在请求到达目标对象之前或之后,对请求进行处理或过滤。该模式可以用于实现不同的功能,如验证、授权、日志记录、压缩等,将不同...
> 想象一个图书馆系统使用过滤器模式来动态组合过滤标准,如类型、作者和可用性。这个Java模式使系统更具可维护性和可扩展性。图书馆系统不是为每个可能的标准组合编写单独的方法,而是采用过滤器设计模式。每个过滤...
过滤器模式,也称为 Chain of Responsibility 模式,是一种行为设计模式,主要用于处理请求的过滤逻辑。在 Java 中,过滤器模式通常应用于网络请求、数据预处理或权限控制等场景。这种模式允许我们通过一系列相互...
拦截过滤器模式是其中的一种行为设计模式,它在请求处理之前或之后执行一系列操作,提供了灵活且可扩展的方式来处理各种任务。这种模式在iOS平台上的应用同样广泛,尤其是在构建应用程序的架构时。 ### 拦截过滤器...
管道过滤器模式是一种设计模式,它在软件工程中被广泛应用于数据处理,特别是在Java编程语言中。这种模式通过连接一系列的处理组件(过滤器),每个组件执行特定的任务,来实现复杂的数据转换。在这个场景中,"管道...
过滤器模式,也被称为“Criteria模式”或“多标准选择模式”,是一种设计模式,它允许我们根据多个条件对数据集合进行筛选。这种模式在软件工程中广泛应用,特别是在数据处理、数据库查询以及用户界面的交互中。下面...
管道过滤器模式是软件体系结构设计中的一种风格,它通过一系列独立的处理单元(即过滤器)和数据传输通道(即管道)来处理数据流。每个过滤器组件负责特定的数据处理功能,读取输入数据流,执行处理后输出新的数据流...
MsgProcessor是消息管理类,setMsg方法设置消息字符串。HTMLFilter的功能是将尖括号替换成中括号;SesitiveFilter的功能是将消息中的敏感词过滤掉;FaceFilter的功能是将笑脸替换成另一种表情符号。
**过滤器模式(Filter Pattern)**是软件设计中的一种**结构型模式**,它主要用于处理对象集合,通过一系列的过滤条件来筛选出满足特定需求的对象。在Java中,过滤器模式常常被用来处理数据筛选、预处理等场景,特别...
良好的体系结构能够确保软件系统的成功部署与维护,而管道过滤器模式作为软件体系结构的一种常见形式,在诸多领域内得到了广泛的应用。 #### 管道过滤器模型 管道过滤器模型是一种面向数据流的软件体系结构,它...
过滤器模式(Filter/Criteria Pattern)是软件设计中的一种结构型模式,它的主要目的是通过定义一系列的过滤条件,对一组对象进行筛选,从而得到满足特定条件的对象子集。这种模式在处理复杂查询时非常有用,因为它...
过滤器模式是一种设计模式,它允许我们通过一系列的处理步骤(即过滤器)来改变输入数据,以满足特定的需求。在Web应用程序中,过滤器通常作为Servlet容器的一部分,如Tomcat或Jetty,它们在请求到达目标Servlet...
过滤器模式,也被称为Criteria模式,是设计模式中的一种结构型模式,它的主要目标是让开发者能够使用多种独立的标准来筛选一组对象,并且可以通过逻辑运算将这些标准串联起来,达到复合过滤的效果。这种模式在实际的...
3. **过滤器工作原理**:过滤器模式通常是一个观察者模式的变体,它允许我们对数据流进行拦截和处理,而不改变原有数据流的结构。在Web应用中,过滤器链常常被用来在请求到达目标Servlet之前执行某些操作,如身份...
在深入理解了这些知识点之后,我们可以看到,本文是通过将管道和过滤器模式以及MVC模式应用到J2EE平台中,来实现软件体系构架的优化和改进。文章不仅探讨了这些模式在J2EE中的具体实现和应用,还强调了它们在提升...
26 }27 }28 }FilterHolder一个过滤器链表实现:1 import java.util.ArrayList; 2 import java.util.List; 3 4 /** 5 * @title: DemoFilterChain 6 * @Author junyu 7 * 旧巷里有一个穿着白衬衫笑起来如太阳般温暖我...