需求:

  1、 对day17_case案例录入的数据进行敏感词汇过滤
  2、 敏感词汇参考 src路径下的《敏感词汇.txt》
  3、 如果是敏感词汇,替换为 ***

分析:

  1、 对request对象进行增强。增强获取参数相关方法
  2、 放行。传递代理对象

代码实现:

  1. import org.springframework.cglib.proxy.InvocationHandler;
  2. import org.springframework.cglib.proxy.Proxy;
  3.  
  4. import javax.servlet.*;
  5. import javax.servlet.annotation.WebFilter;
  6. import java.io.BufferedReader;
  7. import java.io.FileReader;
  8. import java.io.IOException;
  9. import java.lang.reflect.Method;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12.  
  13. /**
  14. * 敏感词汇过滤器
  15. */
  16. @WebFilter("/*")
  17. public class SensitiveWordsFilter implements Filter {
  18.  
  19. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
  20. // 1 创建代理对象,增强 getparameter 方法
  21. ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {
  22. @Override
  23. public Object invoke(Object o, Method method, Object[] args) throws Throwable {
  24.  
  25. // 增强 getparameter 方法
  26. // 判断是否是该方法
  27. if(method.getName().equals("getParameter")) {
  28. // 增强返回值
  29. // 获取返回值
  30. String value = (String) method.invoke(req,args);
  31.  
  32. if(value != null) {
  33. for (String str : list) {
  34. if(value.contains(str)){
  35. value = value.replaceAll(str,"***");
  36. }
  37. }
  38. }
  39.  
  40. return value;
  41. }
  42.  
  43. return method.invoke(req,args);
  44. }
  45. });
  46. // 2 放行,传递增强的代理对象
  47.  
  48. chain.doFilter(proxy_req, resp);
  49. }
  50.  
  51. private List<String> list = new ArrayList<String>(); // 敏感词汇集合
  52. public void init(FilterConfig config) throws ServletException {
  53.  
  54. try {
  55. // 1 加载文件
  56. // 获取文件的真实路径
  57. ServletContext servletContext = config.getServletContext();
  58. String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");
  59. // 2 读取文件
  60.  
  61. BufferedReader br = new BufferedReader(new FileReader(realPath));
  62.  
  63. // 3 将文件的每一行添加到 list 中
  64.  
  65. String line = null;
  66. while((line = br.readLine()) != null) {
  67. list.add(line);
  68. }
  69.  
  70. br.close();
  71.  
  72. System.out.println(list);
  73. } catch (Exception e) {
  74. e.printStackTrace();
  75. }
  76.  
  77. }
  78.  
  79. public void destroy() {
  80. }
  81.  
  82. }

JavaWeb 之 Filter 敏感词汇过滤案例的更多相关文章

  1. 敏感词汇过滤DFA算法

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  2. JavaWeb 之 Filter 验证用户登录案例

    需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...

  3. Filter案例之敏感词过滤和代理模式

    一.需求分析 二 .代理模式 1.概念 2.代码实现 代理对象可以强转为真实对象,即对应的接口类: 3.通过代理增强方法 其中,方法对象invoke真实对象,反射原理: 三.过滤敏感词汇案例代码实现 ...

  4. JavaWeb 过滤敏感词汇

    提交的表单数据,常常要检查有没有敏感词汇,如果有,需要给出提示,或者替换为*. 检查.替换敏感词汇有3种常用的方式 (1)在Servlet中操作. (2)在Filter中先检查.如果要替换敏感词汇,r ...

  5. Filter - 过滤敏感词汇(动态代理)

    /** * 敏感词汇过滤器 */ @WebFilter("/*") public class SensitiveWordsFilter implements Filter { pu ...

  6. JavaWeb中filter的详解及应用案例

    一:Filter介绍 Filter可认为是Servlet的一种“变种”,它主要用于对用户请求(HttpServletRequest)进行预处理,也可以对服务器响应(HttpServletRespons ...

  7. java过滤敏感词汇

    前言 现在几乎所有的网站再发布带有文字信息的内容时都会要求过滤掉发动的.不健康的.影响社会安定的等敏感词汇,这里为大家提供了可以是现在这种功能的解决方案 第一种方式 创建敏感词汇文件:首先需要准备一个 ...

  8. JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码

    JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码 准备条件:一个创建好的 JavaWeb 项目 步骤: 1.创建一个类并实现 Filter 接口 import javax.ser ...

  9. js过滤检测敏感词汇

    html: <textarea rows="10" cols="100" id="myDiv"></textarea> ...

随机推荐

  1. jsch配置sftp服务器ssh免密登录

    前期对接了一个通过ssh免密登录的需求,是基于原先密码登录sftp服务器的代码上进行改造,实际上代码改动量非常少,趁此机会对自己整理的资料做一下总结. 1. 什么是SFTP SFTP是一个安全文件传送 ...

  2. yum 安装指定版本Docker

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_39553910/artic ...

  3. 【C++】C++中的异常解析

    异常是程序在执行期间产生的问题.C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作. 异常提供了一种转移程序控制权的方式.C++ 异常处理涉及到三个关键字:try.catch.throw ...

  4. 从 SVN 迁移至 Git 并保留所有 commit 记录

    yum install -y git-svn 用户映射文件user.txt,等号左边为svn账号,右边为Git用户名和邮箱.注意:svn中有多少用户就要映射多少 test1=test1<1472 ...

  5. UPDATE REPLACE 替换"\\"

    UPDATE Working_InterfaceToManager SET StudyPhotoInfoList = REPLACE(StudyPhotoInfoList,"\\\\&quo ...

  6. 支付宝小程序开发——H5跳转到小程序(获取小程序页面的链接)

    前言: 这个问题支付宝小程序官方文档并没有专门说明,钉钉群的官方技术支持给了个开发者社区的帖子,详见:如何跳转小程序. 如果配置的页面没有参数还好,不会出问题,如果有参数,很可能配出来的链接无法正常获 ...

  7. Android Camera2/HAL3

    Android : Camera2/HAL3 框架分析 https://www.cnblogs.com/blogs-of-lxl/p/10651611.html Android : Camera之ca ...

  8. java中map和对象互转工具类的实现示例

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,而且用起来也还算方便,比如像fastJson就可以轻松实现map ...

  9. win10 搜索栏输入后长期没反应

    博客转载自:https://blog.csdn.net/qq_40875146/article/details/81742533 Get-AppXPackage -Name Microsoft.Win ...

  10. java Random 随机密码

    /** * Created by xc on 2019/11/23 * 生成随机密码:6位数字 */public class Test7_4 { public static void main(Str ...