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

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

时间: 2019-09-17

Java实现DFA算法对敏感词、广告词过滤功能示例

一.前言 开发中经常要处理用户一些文字的提交,所以涉及到了敏感词过滤的功能,参考资料中DFA有穷状态机算法的实现,创建有向图.完成了对敏感词.广告词的过滤,而且效率较好,所以分享一下. 具体实现: 1.匹配大小写过滤  2.匹配全角半角过滤  3.匹配过滤停顿词过滤.  4.敏感词重复词过滤. 例如: 支持如下类型类型过滤检测: fuck 全小写 FuCk 大小写 fuck全角半角 f!!!u&c ###k 停顿词 fffuuuucccckkk 重复词 敏感词过滤的做法有很多,我简单描述我现在理

Java动态代理(设计模式)代码详解

基础:需要具备面向对象设计思想,多态的思想,反射的思想: Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对Java动态代理机制有更加深入的理解.本文首先从Java动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 代理模

java利用DFA算法实现敏感词过滤功能

前言 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxoo相关的文字时)时要能检 测出来,很多项目中都会有一个敏感词管理模块,在敏感词管理模块中你可以加入敏感词,然后根据加入的敏感词去过滤输 入内容中的敏感词并进行相应的处理,要么提示,要么高亮显示,要么直接替换成其它的文字或者符号代替. 敏感词过滤的做法有很多,我简单描述我现在理解的几种: ①查询数据库当中的敏感词,循环每一个敏感词,然后去输入的文本中从头到尾搜索一遍,看是否存在此敏感词,有则做相 应的处理,

Java动态代理和反射机制详解

反射机制 Java语言提供的一种基础功能,通过反射,我们可以操作这个类或对象,比如获取这个类中的方法.属性和构造方法等. 动态代理:分为JDK动态代理.cglib动态代理(spring中的动态代理). 静态代理 预先(编译期间)确定了代理者与被代理者之间的关系,也就是说,若代理类在程序运行前就已经存在了,这种情况就叫静态代理 动态代理 代理类在程序运行时创建的代理方式.也就是说,代理类并不是在Java代码中定义的,而是在运行期间根据我们在Java代码中的"指示"动态生成的. 动态代理比

Java中的引用和动态代理的实现详解

我们知道,动态代理(这里指JDK的动态代理)与静态代理的区别在于,其真实的代理类是动态生成的.但具体是怎么生成,生成的代理类包含了哪些内容,以什么形式存在,它为什么一定要以接口为基础? 如果去看动态代理的源代码(java.lang.reflect.Proxy),会发现其原理很简单(真正二进制类文件的生成是在本地方法中完成,源代码中没有),但其中用到了一个缓冲类java.lang.reflect.WeakCache<ClassLoader,Class<?>[],Class<?>

JavaEE Filter敏感词过滤的方法实例详解

我们在聊天的时候的或者留言的时候,有部分词是不允许发表出来.我们可以采用过滤器实现这个功能. 我们只是简单利用过滤器实现这个过滤的功能,有些地方没写的很全 前台代码: <body> <form action="<c:url value='/WordServlet'/>" method="post"> 姓名:<input type="text" name="name"/><b

浅谈Java注解和动态代理

本文主要介绍Java中与注解和动态代理有关的部分知识,接下来我们看看具体内容. Annotation(注解) 其实就是代码里的特殊标记, 它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行. 1. 三个基本的Annotation: Override:限定重写父类方法, 该注解只能用于方法 Deprecated:用于表示某个程序元素(类, 方法等)已过时 SuppressWarnings:抑制编译器警告. 2.自定义Annotati

Java实现敏感词过滤实例

敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来一看,整个过程如下:读取敏感词库.如果HashSet集合中,获取页面上传文字,然后进行匹配.我就想这个过程肯定是非常慢的.对于他这个没有接触的人来说我想也只能想到这个,更高级点就是正则表达式.但是非常遗憾,这两种方法都是不可行的.当然,在我意识里没有我也没有认知到那个算法可以解决问题,但是Googl

js实现敏感词过滤算法及实现逻辑

最近弄了一个用户发表评论的功能,用户上传了评论,再文章下可以看到自己的评论,但作为社会主义接班人,践行社会主义核心价值观,所以给评论敏感词过滤的功能不可少,在网上找了资料,发现已经有非常成熟的解决方案. 常用的方案用这么两种 1.全文搜索,逐个匹配.这种听起来就不够高大上,在数据量大的情况下,会有效率问题,文末有比较 2.DFA算法-确定有限状态自动机 附上百科链接确定有限状态自动机 DFA算法介绍 DFA是一种计算模型,数据源是一个有限个集合,通过当前状态和事件来确定下一个状态,即 状态+事件

Jsp敏感词过滤的示例代码

大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本网站的特殊敏感词. 比如,当你发贴的时候带有某些事先设定的词时,这个贴是不能发出的.或者这个词被自动替换为星号(*)或叉号(X)等,或者说是被和谐掉了. 在我看来敏感词过滤最重要的是在写过滤词汇的算法,如何过滤出大批量的敏感词,我感觉DFA的思想不错 DFA简介 在实现文字过滤的算法中,DF

C#敏感词过滤实现方法

本文实例讲述了C#敏感词过滤实现方法.分享给大家供大家参考.具体如下: 这两天突然想到了敏感词过滤 就结合网上找到的资料自己写了一个,脏字数量700+(效率不是很高 测试在110多KB的情况下比replace快 3-4倍) 测试结果图 单位:秒 代码如下: System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length); string filterText = "需要过滤的脏字 以|分开"; //脏字

PHP实现的敏感词过滤方法示例

本文实例讲述了PHP实现的敏感词过滤方法.分享给大家供大家参考,具体如下: 1.敏感词过滤方法 /** * @todo 敏感词过滤,返回结果 * @param array $list 定义敏感词一维数组 * @param string $string 要过滤的内容 * @return string $log 处理结果 */ function sensitive($list, $string){ $count = 0; //违规词的个数 $sensitiveWord = ''; //违规词 $st

浅谈Python 敏感词过滤的实现

一个简单的实现 class NaiveFilter(): '''Filter Messages from keywords very simple filter implementation >>> f = NaiveFilter() >>> f.add("sexy") >>> f.filter("hello sexy baby") hello **** baby ''' def __init__(self):

Python 实现王者荣耀中的敏感词过滤示例

王者荣耀的火爆就不用说了,但是一局中总会有那么几个挂机的,总能看到有些人在骂人,我们发现,当你输入一些常见的辱骂性词汇时,系统会自动将该词变成"*",作为python初学者,就想用python来实现这一功能. 步骤很简单所以就用交互式演示 首先我们要知道王者荣耀有哪些敏感词汇,然后放到一个元组, 第二步用户接收输入的消息 第三步处理敏感词汇 最后输出处理后的消息. >>> words=('金币', '挂', '傻逼', '猪', '你妈') #创建一个敏感词汇库 &g

python 实现敏感词过滤的方法

如下所示: #!/usr/bin/python2.6 # -*- coding: utf-8 -*- import time class Node(object): def __init__(self): self.children = None # The encode of word is UTF-8 def add_word(root,word): node = root for i in range(len(word)): if node.children == None: node.c

Python实现敏感词过滤的4种方法

在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去屏蔽这些敏感词.下面我来介绍一些简单版本的敏感词屏蔽的方法. (我已经尽量把脏话做成图片的形式了,要不然文章发不出去) 方法一:replace过滤 replace就是最简单的字符串替换,当一串字符串中有可能会出现的敏感词时,我们直接使用相应的replace方法用*替换出敏感词即可. 缺点: 文本和敏感词少