动态代理的格式
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); }