2阶——动态代理 (方法增强,参数增强,方法体增强)小Demo敏感词汇过滤

动态代理的格式

Porxy.newProxyInstance(
    ClassLoader loader,       //指定当前目标对象使用类加载器
    Class<?>[] interfaces,     //目标对象实现的接口的类型
    new InvocationHandler() { //事件处理器
         @Override
         public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
    }       
)  
        

//方法返回值的增强案例 敏感词汇过滤

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;

        //用接口类型来接收代理对象
        HttpServletRequest res = (HttpServletRequest)Proxy.newProxyInstance(
                request.getClass().getClassLoader(),  //需要代理对象的类加载器
                request.getClass().getInterfaces(),   //需要代理对象的类所实现的接口
                new InvocationHandler() {   //处理器
                    @Override
                    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                        
                        if(method.getName().equalsIgnoreCase("getParameter")){

                            //获取方法的原始返回值
                            String value = (String) method.invoke(request,objects);

                            if(value !=null){
                                if(value.contains("XXX") || value.contains("xxxx")){
                                    value = value.replaceAll("xxx", "*****");
                                }
                            }
                            return value;
                        }


                        //如果是其他的方法  一个方法可以实现 参数增强,返回值增强 和方法提增强  这里的return是指代返回值
                        return method.invoke(request,objects);
                    }
                });

        filterChain.doFilter(res,response);

}
坚持
原文地址:https://www.cnblogs.com/gaoSJ/p/12935856.html