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中事半功倍的工具类合集分享

    SpringBoot中事半功倍的工具类合集分享

    在日常开发中经常有这样那样的小功能需要实现,这些一般会作为工具类存在,在项目中有一些通用的功能,Spring内置了需要工具类,而且经过了大量的验证,可以在开发中助你一臂之力,快跟随小编一起来看看吧
    2023-02-02
  • springboot与dubbo的版本匹配问题

    springboot与dubbo的版本匹配问题

    这篇文章主要介绍了springboot与dubbo的版本匹配问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Action访问Servlet的API的简单实例

    Action访问Servlet的API的简单实例

    下面小编就为大家带来一篇Action访问Servlet的API的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • SpringBoot中TypeExcludeFilter的作用及使用方式

    SpringBoot中TypeExcludeFilter的作用及使用方式

    在SpringBoot应用程序中,TypeExcludeFilter通过过滤特定类型的组件,使它们不被自动扫描和注册为bean,这在排除不必要的组件或特定实现类时非常有用,通过创建自定义过滤器并注册到spring.factories文件中,我们可以在应用启动时生效
    2025-01-01
  • Hadoop源码分析二安装配置过程详解

    Hadoop源码分析二安装配置过程详解

    本篇是Hadoop源码分析系列文章第二篇,主要介绍Hadoop安装配置的详细过程,后续本系列文章会持续更新,有需要的朋友可以借鉴参考下
    2021-09-09
  • Java线程阻塞工具LockSupport用法详解

    Java线程阻塞工具LockSupport用法详解

    Java中的LockSupport是一个用于线程同步的工具类,它提供了一种基于线程的阻塞和唤醒机制,LockSupport可以让线程在特定条件下阻塞挂起,等待其他线程发送信号来唤醒它,本文将通过一个小案例给大家介绍一下LockSupport怎么用,让你永远记住它
    2023-08-08
  • Intellij IDEA全局替换快捷键整理

    Intellij IDEA全局替换快捷键整理

    这篇文章主要给大家介绍了关于Intellij IDEA全局替换快捷键整理的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • SpringBoot整合Mybatis Plus实现基本CRUD的示例代码

    SpringBoot整合Mybatis Plus实现基本CRUD的示例代码

    Mybatis Plus是在Mybatis的基础上的增强,使得我们对一些基本的CRUD使用起来更方便,本文主要介绍了SpringBoot整合Mybatis Plus实现基本CRUD的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05
  • Idea中如何调出Run dashboard 或services窗口

    Idea中如何调出Run dashboard 或services窗口

    这篇文章主要介绍了Idea中如何调出Run dashboard 或services窗口问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 基于Consumer接口、Predicate接口初使用

    基于Consumer接口、Predicate接口初使用

    这篇文章主要介绍了Consumer接口、Predicate接口初使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论