使用动态代理对象进行敏感字过滤

Posted newcityboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用动态代理对象进行敏感字过滤相关的知识,希望对你有一定的参考价值。

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();




以上是关于使用动态代理对象进行敏感字过滤的主要内容,如果未能解决你的问题,请参考以下文章

Java 动态代理

Java JDK 动态代理(AOP)使用及实现原理分析

JDK动态代理

java静态代理和动态代理

java动态代理原理及解析

在Filter中使用动态代理解决请求中文乱码问题