敏感词汇过滤
-
需求
- 对UserCRUD_case案例中录入的数据进行敏感词汇的过滤
- 敏感词汇参考《敏感词汇.txt》
- 若是敏感词汇,则替换为***
-
分析
- 在进行过滤前后,所获取的request请求对象是同一个,所以我们可以对该对象进行一些修改,然后继续使用该对象
- 由于request对象中默认不存在修改数据的方法,所以关键是对request对象的getParameter方法进行增强;产生一个新的request对象
- 放行。传递代理对象
-
如何增强对象的功能?
- 设计模式 :一些通用的解决固定问题的模式
- 可以增强对象功能的设计模式
- 装饰模式
- 代理模式
- 概念
- 真实对象 :被代理的对象
- 代理对象
- 代理模式 :代理对象来代理真实对象,来实现增强真实对象功能的目的
- 实现方式
- 静态代理 :有一个类文件藐视代理模式
- 动态代理 :在内存中形成代理类
- 实现步骤
- 代理对象和真实对象实现相同的接口
- 代理对象 = Proxy.newProxyInstance();
- 使用代理对象调用方法
- 增强方法
- 增强方式
- 增强参数列表
- 增强返回值类型
- 增强方法体执行逻辑
- 实现步骤
- 概念
- 可以增强对象功能的设计模式
- 设计模式 :一些通用的解决固定问题的模式
-
本次案例只需要将request请求对象中的敏感词汇替换,然后封装到新的request对象中即可,所以可以选择使用增强返回值类型方法的代理模式来实现
-
实现getParmeter方法增强的代码:
package web.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;