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();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。