public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//使用动态代理
//放行之前,使用动态代理技术,增强req对象的方法
//request -->为了反射调用方法()时 需要传入的对象参数
HttpServletRequest req = (HttpServletRequest) request;

//类加载器
ClassLoader classLoader = request.getClass().getClassLoader();

//被代理的接口 HttpServletRequest
HttpServletRequest requestProxy = (HttpServletRequest) Proxy.newProxyInstance(classLoader, new Class[]{HttpServletRequest.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//增强方法
if (method.getName().equals("getParameter")) {
//增强getParameter()方法,其它方法还是调用被代理者原本的方法
//获取请求参数
String value = (String) method.invoke(req, args);

//判断
if (strList != null) {

for (String str : strList) {
//是否包含非法字符串
if (value.contains(str)) {
//说明value包含非法字符串
//需要把对应的非法字符串改为 "**"
//拼接
String start = "";
for (int i = 0; i < str.length(); i++) {
start += "*";
}

//替换
value = value.replace(str, start);
}
}
}

return value;

}

//其它方法 没有增强的 还是调用原有方法
return method.invoke(req, args);
}

});


//最后放行 注意放行的是我们上面增强处理过的requestProxy
// 不然放行request等于什么也没做 增强方法无法调用
chain.doFilter(requestProxy, response);
}