首页 > 编程知识 正文

servlet过滤器chain(java filter chain_Java模拟FilterChain的实现 (Chain Of Responsibility模式))

时间:2023-05-03 07:12:53 阅读:123405 作者:3210

有这样的APP应用场景。 对于传递到后台的Request和返回页面的Response信息,如果页面上的Request包含敏感信息或危险字符串,则会影响系统,因此会编写过滤器来处理请求处理方法因信息处理而异。 如果只使用一个过滤器处理所有信息,则由于可扩展性不够,可以为不同的信息处理编写不同的过滤器,并将过滤器放入一个过滤器通道中,从而实现信息处理的“热插拔”。 这种过滤器链就像职责链,链上的每个节点都希望处理不同的功能,同时对于响应,可以在Resuest中处理

从a过滤器到d过滤器构成过滤器通道。

让我们模拟一下此servlet的过滤器通道。

首先定义接口过滤器。 因为所有过滤器都必须遵循此规范才能加载到过滤器通道中。

1 publicinterfacefilter {2} voiddofilter (请求,响应响应,过滤器通道); 3 }

接下来,创建过滤器通道和每个过滤器。

1 publicclassfilterchainimplementsfilter {2list fs=new ArrayList (; 3索引=0; 4

5

6 publicfilterchainaddfilter (滤波器) 7fs.add ) f; 8返回时间; (10 ) 10

11

12 @ override 13 publicvoiddofilter (请求响应,响应响应,过滤器通道() 14if ) index==fs.size ) ) 15filterf=fs.get(index ); 16索引; 17f.do filter (请求,响应,chain ); (十九)十九

20

21 }

1 publicclasshtmlfilterimplementsfilter {2}

3

4 @ override5publicvoiddofilter (请求响应,响应响应,过滤器通道) )6request.requeststr=request.request 8 response.responsestr='---- html---- '; 9 }10 }

1 publicclasssensitivefilterimplementsfilter {2}

3

4 @ override5publicvoiddofilter (请求响应,响应响应,过滤器通道) )6request.requeststr=request.request 8 response.responsestr='---- sensitive---'; (10 ) 10

11

12 }

最后一个测试班。

1公共类{2}

3 /**

4 *@paramargs5 */

6 publicstaticvoidmain (字符串[ ] args ) { 7字符串msg='测试,

19 }

测试结果如下(箭头为Filter的方向) :

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。