JAVA使用动态代理对象进行敏感字过滤代码实例
这篇文章主要介绍了JAVA使用动态代理对象进行敏感字过滤代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
packagecom.hopetesting.web.filter; importjavax.servlet.*; importjavax.servlet.annotation.WebFilter; importjava.io.BufferedReader; importjava.io.FileNotFoundException; importjava.io.FileReader; importjava.io.IOException; importjava.lang.reflect.InvocationHandler; importjava.lang.reflect.Method; importjava.lang.reflect.Proxy; importjava.util.ArrayList; importjava.util.List; /** *@authornewcityman *@date2019/9/13-19:41 */ @WebFilter("/*") publicclassSensitiveWordsFilterimplementsFilter{ publicvoiddestroy(){ } publicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain)throwsServletException,IOException{ //1、创建代理对象,增强getParameter方法 ServletRequestproxy_req=(ServletRequest)Proxy.newProxyInstance(req.getClass().getClassLoader(),req.getClass().getInterfaces(),newInvocationHandler(){ @Override publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{ //判断是否是getParameter方法 //如果是,增强getParameter方法 if(method.getName().equals("getParameter")){ //增强返回值 //获取返回值 Stringvalue=(String)method.invoke(req,args); if(value!=null){ for(Stringstr:list){ if(value.contains(str)){ value=value.replace(str,"******"); } } } returnvalue; } returnmethod.invoke(req,args); } }); chain.doFilter(proxy_req,resp); } privateListlist=newArrayList ();//敏感词汇集合 publicvoidinit(FilterConfigconfig)throwsServletException{ try{ //1、获取文件的真实路径 ServletContextservletContext=config.getServletContext(); StringrealPath=servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt"); //2、读取文件 BufferedReaderbr=newBufferedReader(newFileReader(realPath)); //3、将文件的每一行读取到list中 Stringline=null; while((line=br.readLine())!=null){ list.add(line); } br.close(); System.out.println(list); }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。