JAVA使用动态代理对象进行敏感字过滤代码实例
更新时间:2019年09月18日 09:33:53 作者:小猪_佩奇
这篇文章主要介绍了JAVA使用动态代理对象进行敏感字过滤代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
这篇文章主要介绍了JAVA使用动态代理对象进行敏感字过滤代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
package com.hopetesting.web.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
/**
* @author newcityman
* @date 2019/9/13 - 19:41
*/
@WebFilter("/*")
public class SensitiveWordsFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//1、创建代理对象,增强getParameter方法
ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//判断是否是getParameter方法
//如果是,增强getParameter方法
if (method.getName().equals("getParameter")) {
//增强返回值
//获取返回值
String value = (String) method.invoke(req, args);
if (value != null) {
for (String str : list) {
if (value.contains(str)) {
value = value.replace(str, "******");
}
}
}
return value;
}
return method.invoke(req, args);
}
});
chain.doFilter(proxy_req, resp);
}
private List<String> list = new ArrayList<String>(); //敏感词汇集合
public void init(FilterConfig config) throws ServletException {
try {
//1、获取文件的真实路径
ServletContext servletContext = config.getServletContext();
String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");
//2、读取文件
BufferedReader br = new BufferedReader(new FileReader(realPath));
//3、将文件的每一行读取到list中
String line = null;
while ((line = br.readLine()) != null) {
list.add(line);
}
br.close();
System.out.println(list);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
SpringBoot中TypeExcludeFilter的作用及使用方式
在SpringBoot应用程序中,TypeExcludeFilter通过过滤特定类型的组件,使它们不被自动扫描和注册为bean,这在排除不必要的组件或特定实现类时非常有用,通过创建自定义过滤器并注册到spring.factories文件中,我们可以在应用启动时生效2025-01-01
SpringBoot整合Mybatis Plus实现基本CRUD的示例代码
Mybatis Plus是在Mybatis的基础上的增强,使得我们对一些基本的CRUD使用起来更方便,本文主要介绍了SpringBoot整合Mybatis Plus实现基本CRUD的示例代码,具有一定的参考价值,感兴趣的可以了解一下2023-05-05
Idea中如何调出Run dashboard 或services窗口
这篇文章主要介绍了Idea中如何调出Run dashboard 或services窗口问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-03-03


最新评论