用java写敏感词过滤器的代码

这里采用动态代理,所以要创建proxy代理对象,利用代理,来增强某些方法(getParameter方法、getParameterMap方法、getParameterValues方法)

@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() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//增强getParameter方法if (method.getName().equals("getParameter")){//增强返回值//获取返回值String value=(String) method.invoke(req, args);if (value!=null){for (String s : list) {if (value.contains(s)){value=value.replaceAll(s, "***");}}}return value;}//判断方法名是否是getParameterMapif (method.getName().equals("getParameterMap")){Map<String, String[]> map=(Map<String, String[]>) method.invoke(req, args);Map<String,String[]> newMap=new HashMap<>();for (String key : map.keySet()) {String[] values = map.get(key);List<String> sb=new ArrayList<>();for (String value : values) {if (value!=null){for (String s : list) {if (value.contains(s)){value=value.replaceAll(s, "***");}}sb.add(value);}}String[] sBuffer=new String[values.length];newMap.put(key, (String[]) sb.toArray(sBuffer));}return newMap;}//判断方法名是否是getParameterValuesif (method.getName().equals("getParameterValues")){String[] values=(String[])method.invoke(req, args);List<String> newlist=new ArrayList<>();if (values!=null){for (String value : values) {if (value!=null){for (String s : list) {if (value.contains(s)) {value = value.replaceAll(s, "***");}}}newlist.add(value);}}String[] sBuffer=new String[newlist.size()];String[] newStr=newlist.toArray(sBuffer);//这里要这样写,因为toArray在转型的时候要加参数,长度就是你要转型的类型长度return newStr;}return method.invoke(req, args);}});//2.放行chain.doFilter(proxy_req, resp);}private List<String> list=new ArrayList<>();//敏感词汇集合public void init(FilterConfig config) throws ServletException {try{//加载文件(获取文件的真实路径)ServletContext servletContext = config.getServletContext();String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");//读取文件BufferedReader br=new BufferedReader(new FileReader(realPath));//将文件的每一行数据添加到list中String line=null;while ((line=br.readLine())!=null){list.add(line);}br.close();System.out.println(list);}catch (Exception e){e.printStackTrace();}}}

测试代码

@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");/*String name = request.getParameter("name");String msg = request.getParameter("msg");System.out.println(name+":"+msg);*//*Map<String, String[]> map = request.getParameterMap();for (String key : map.keySet()) {String[] values = map.get(key);for (String value : values) {System.out.println(key+":"+value);}}*/String[] hobby = request.getParameterValues("hobby");for (String s : hobby) {System.out.println(s);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

其中注释的代码是用来测试前面2段代码的功能(getParameter方法、getParameterMap方法),后面那段代码是用来测试getParameterValues方法。

用java写敏感词过滤器的代码相关推荐

  1. JAVA -敏感词过滤器 工具类SensitiveFilter

    1.添加敏感词过滤工具类 类1: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...

  2. 【前缀树】写一个敏感词过滤器

    1.什么是敏感词过滤 这其实是一个很常见的功能,随处可见以至于你可能都没关注过,基本上在有评论的地方都会有它的身影. 举例来说,你打游戏和别人对喷的时候,是不是一些脏话发不出去哈哈,这些词汇会用*** ...

  3. python敏感词过滤代码简单代码,Python学习笔记系列——读写文件以及敏感词过滤器的实现...

    一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...

  4. flex java 全局拦截_flex + java 过滤敏感词

    过滤敏感词这个相对比较容易做到,网上也很多方法,看得比较多的一个方法就是:把所有的敏感词写入到一个properties文件中,程序启动时拼成一个正则表达式.这个也只是比较基础的敏感词过滤器,比较强大的 ...

  5. 用前缀树实现中文敏感词过滤器

    文章目录 前言 运行环境 过滤器源码 过滤器测试类 前言 本文代码实现一个中文的敏感词过滤器,预先将准备好的敏感词写入前缀树数据结构中实现快速检索,并且节省内存.一般用于检查注册用户名称.言论是否包含 ...

  6. 直播代码中关于敏感词替换的代码编辑

    想要在直播代码中实现字符串过滤的方式有很多种,每种编程语言都有相应的处理方式,且因语言不同,其所使用的函数也有所不同,但最终的目的都是为达到用户的绿色上网.安全上网,呈现给用户一种安全舒适的上网环境. ...

  7. 用js模拟一个简单敏感词过滤器

    1.用js模拟一个简单敏感词过滤器 (用户输入的内容中的敏感词替换为*) 例:"今天有个傻子在旁边大喊大叫,影响了我的操作.", 过滤后:"今天有个在旁边大喊大叫,影响了 ...

  8. Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...

  9. 敏感词过滤器 filter

    敏感词过滤器 filter /*** 敏感词过滤器*/ public class SensitiveWordsFilter implements Filter {// 敏感词列表private Str ...

最新文章

  1. 【html、CSS、javascript-8】JavaScript作用域
  2. Spring Boot 2.x基础教程:使用EhCache缓存集群
  3. 使用JNDI+连接池
  4. 如何远程链接linux服务器,如何远程登陆Linux/Windows服务器
  5. ALGO-117_蓝桥杯_算法训练_友好数
  6. js对象数组转java对象数组对象数组对象数组对象,前台js数组json字符串,后台json转为对象数组的具体实现...
  7. ASP.NET Core和json请求这样用真简单,axios、微信小程序得救了
  8. Tomcat无需输入项目名,直接用域名访问项目
  9. python for循环连续输入五个成绩判断等级_Python基础(1)——输入输出/循环/条件判断/基本数据类型...
  10. 丢瓶盖(洛谷-P1316)
  11. pythonseleniumide使用_selenium第二课(脚本录制seleniumIDE的使用)
  12. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
  13. C3P0连接池配置方式
  14. 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节
  15. Python 根据百度 API 获得经纬度,根据经纬度计算城市间距离
  16. 昆仑固件系统u盘引导_系统 | 把 Grub 安装到 U 盘上 / 重建 Grub 引导
  17. ansys--workbench(导入solidworks)受力分析
  18. iOS-常用的第三方库以及实例
  19. 利用记事本编写html代码和word实现A4信笺纸(信签纸)电子版的两种设计法
  20. HTML5+CSS3基础响应式页面布局

热门文章

  1. python matplotlib 绘制图片并保存图片
  2. CLRS的一些有用的资源
  3. 十二星座匹配对象_十二星座最佳恋人配对
  4. Java如何实现哈夫曼编码
  5. 产品经理常用工作方法及原则汇总
  6. JAVA 识别图片中二维码 opencv 识别精准
  7. FMC子卡模块学习资料:FMC303-两路14位2.5Gsps DA FMC子卡模块
  8. Windows安装 Telnet 服务器
  9. 灰度变换 - 对数变换
  10. HR管理系统如何选?