JavaWeb19.7【Filter&Listener:案例2-敏感词汇过滤】

基于day17_base项目

 

 

 

 

 

复制代码
 1 package com.haifei.web.filter;
 2 
 3 import javax.servlet.*;
 4 import javax.servlet.annotation.WebFilter;
 5 import java.io.BufferedReader;
 6 import java.io.FileReader;
 7 import java.io.IOException;
 8 import java.lang.reflect.InvocationHandler;
 9 import java.lang.reflect.Method;
10 import java.lang.reflect.Proxy;
11 import java.util.ArrayList;
12 import java.util.List;
13 
14 /**
15  * 敏感词汇过滤器
16  */
17 @WebFilter("/*")
18 public class SensitiveWordsFilter implements Filter {
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 proxy, Method method, Object[] args) throws Throwable {
24                 //判断方法名是否是 getParameter
25                 if (method.getName().equals("getParameter")){
26                     //增强返回值
27 
28                     //获取原返回值,找到敏感词汇,并替换为***
29                     String value = (String) method.invoke(req, args);
30                     if (value != null){
31                         for (String str : list) {
32                             if (value.contains(str)){
33                                 value = value.replaceAll(str, "***");
34                             }
35                         }
36                     }
37                     return value;
38                 }else {
39                     return method.invoke(req, args);
40                 }
41 
42                 //判断方法名是否是 getParameterMap
43                 //判断方法名是否是 getParameterValue
44             }
45         });
46 
47         //2 放行
48         chain.doFilter(proxy_req, resp);
49     }
50 
51     private List<String> list = new ArrayList<>(); //敏感词汇集合
52 
53     public void init(FilterConfig config) throws ServletException {
54         try {
55             //获取敏感词汇配置文件的真实路径
56             ServletContext servletContext = config.getServletContext();
57             String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");//src下资源的真实路径获取
58 
59             //读取文件,将文件的每一行数据添加到list
60             BufferedReader br = new BufferedReader(new FileReader(realPath)); //br默认GBK?文件改为GBK编码,不然读取出来的数据乱码
61             String line = null;
62             while ((line = br.readLine()) != null){
63                 list.add(line);
64             }
65             br.close();
66 
67             System.out.println(list);
68         }catch (Exception e){
69             e.printStackTrace();
70         }
71     }
72 
73     public void destroy() {
74 
75     }
76 
77 }
复制代码
复制代码
 1 package com.haifei.web.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import java.io.IOException;
 9 
10 @WebServlet("/TestServlet")
11 public class TestServlet extends HttpServlet {
12     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13         String name = request.getParameter("name");
14         String msg = request.getParameter("msg");
15 
16         System.out.println(name + ":" + msg);
17     }
18 
19     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20         this.doPost(request, response);
21     }
22 }
复制代码
1
2
3
4
坏蛋
笨蛋
混蛋
王八蛋

  

 

 

 

posted @   yub4by  阅读(45)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示