当前位置: 首页 > 编程笔记 >

JAVA使用动态代理对象进行敏感字过滤代码实例

隆扬
2023-03-14
本文向大家介绍JAVA使用动态代理对象进行敏感字过滤代码实例,包括了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();
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Java动态代理静态代理实例分析,包括了Java动态代理静态代理实例分析的使用技巧和注意事项,需要的朋友参考一下 代理模式:为其他对象提供一种代理以控制某个对象的访问。用在:在某些情况下,一个客户不想或者不能直接访问另一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用,代理对象还可以完成它附加的操作。 例子:就像房东、租客、中介的关系。中介(代理对象)为房东(真实对象)出租

  • 本文向大家介绍Java对象流实例代码,包括了Java对象流实例代码的使用技巧和注意事项,需要的朋友参考一下 将日期对象和向量对象写入文件,然后从文件中读出并输出到屏幕上 对象输入流)可读取使用对象输出流写入的原始数据和类型,与文件输入输出流一起可以实现对象的持久性存储。 结果: Fri Jul 24 11:28:01 CST 2015 [不求有功, 才华出众, 瞬息万变] 成功构建 (总时间: 2

  • 本文向大家介绍java 反射和动态代理详解及实例代码,包括了java 反射和动态代理详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 一、java中的反射 1.通过反射加载类的属性和方法实例代码: 2.类加载器ClassLoader 3.动态代理 静态代理:代理类和目标对象的类型都是在编译期间确定下来,不利于程序的扩展。同时每个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。

  • 问题内容: 除了在主机上手动更改系统时钟之外,是否可以通过代码或JVM参数覆盖通过呈现的当前时间? 一点背景: 我们有一个系统,该系统运行许多会计工作,这些工作围绕其当前日期(例如,每月的1号,每年的1号等)进行逻辑转换。 不幸的是,许多传统代码都调用诸如或的函数,而这两个函数最终都调用到。 出于测试目的,现在,我们不得不手动更新系统时钟,以操纵代码认为正在运行测试的时间和日期。 所以我的问题是:

  • 问题内容: 实际上,这不是一个问题,但实际上我需要您的意见…我把他的帖子放在这里是因为我知道您一直都很活跃,所以请不要认为这是一个坏问题并与我分享您的意见。 我已经使用Java动态代理来集中化在独立模式下使用的JPA代码,这是动态代理代码: 这是包含更多信息的链接(http://m-hewedy.blogspot.com/2010/04/using-dynamic-proxies-to- cent

  • 本文向大家介绍浅谈Java代理(jdk静态代理、动态代理和cglib动态代理),包括了浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)的使用技巧和注意事项,需要的朋友参考一下 一、代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强。加入一些非业务性代码,比如事务、日志、报警发邮件等操作。 二、jdk静态代理 1、业务接口 2、业务实现类 3、代理类