动态代理-非法字符过滤

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);
    }

 

posted @ 2021-07-22 18:10  Qyuelin  阅读(51)  评论(0)    收藏  举报