首页 > 其他分享 >Fitter-案例-过滤敏感词汇-分析 Fitter-案例-过滤敏感词汇-代码实现

Fitter-案例-过滤敏感词汇-分析 Fitter-案例-过滤敏感词汇-代码实现

时间:2023-01-31 10:26:09浏览次数:41  
标签:词汇 java String Fitter req 过滤 import servlet

Fitter-案例-过滤敏感词汇-分析

需求:

  1. 对day17_case案例录入的数据进行敏感词汇过滤

  2. 敏感词汇参考《敏感词汇.txt》

  3. 如果是敏感词汇,替换为 **

 

分析:
  1. 对request对象进行增强。增强获取参数相关方法

  2. 放行。传递代理对象

Fitter-案例-过滤敏感词汇-代码实现

 

 

 

package com.example.day17_case.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.BufferedReader;
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;


@WebFilter("/*")
public class SensitiveWordsFilter implements Filter {
    //敏感词汇集合
    private List<String> list = new ArrayList<String>();
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {


        try {
            //获取文件真实路径
            ServletContext servletContext = filterConfig.getServletContext();
            String realPath = servletContext.getRealPath("/WEB-INF/敏感词汇.txt");

            //读取文件
            BufferedReader bufferedReader = new BufferedReader(new FileReader(realPath));

            //将文件的每一行数据添加到list中
            String line = null;
            while((line = bufferedReader.readLine())!=null){
                list.add(line);
            }
            bufferedReader.close();
            System.out.println(list);
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        //创建代理对象,增强getParameter方法
        ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.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(servletRequest,servletResponse);
                    if(value!=null){
                        for(String str: list){
                            if (value.contains(str)){
                                value = value.replaceAll(str,"***");
                            }
                        }
                    }
                    return value;
                }
                return method.invoke(servletRequest,args);
            }

        });
        //放行
        filterChain.doFilter(proxy_req,servletResponse);
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

 

package com.example.day17_case.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/textServlet")
public class Textservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        String msg = req.getParameter("msg");

        System.out.println(name+":"+msg);
    }
}

 

标签:词汇,java,String,Fitter,req,过滤,import,servlet
From: https://www.cnblogs.com/yuzong/p/17077274.html

相关文章

  • 第一周|数组过滤器
    后端语言里,数组在内存中使用的是一段连续的存储空间,对于合法索引支持随机访问。下面介绍数组过滤器的相关习题(一般要求只使用常数的额外空间)。算法基本思想是:顺序遍历数......
  • 神奇的贝叶斯---垃圾邮件过滤
        使用贝叶斯进行垃圾邮件过滤的原理很简单,假如我们在邮件中发现一个词--“发票”,那么就根据这个词来计算这封邮件是垃圾邮件的概率    P(垃圾|发票)=P......
  • 0136-Go-行过滤器
    环境Time2022-08-25Go1.19前言说明参考:https://gobyexample.com/line-filters目标使用Go语言行过滤器。示例packagemainimport("bufio""fmt"......
  • Fitter-细节-过滤器拦截方式配置 Fitter-细节-过滤器链(多个过滤器)
    Fitter-细节-过滤器拦截方式配置  拦截方式配置:资源被访问的方式注解配置:设置dispatcherTypes属性1.REQUEST:默认值。浏览器直接请求资源......
  • django 自定义模版过滤器
    虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。模版过滤器必须要......
  • django 模版常用过滤器
    模版常用过滤器在模版中,有时候需要对一些数据进行处理以后才能使用。一般在Python中我们是通过函数的形式来完成的。而在模版中,则是通过过滤器来实现的。过滤器使用的是|......
  • 直播电商平台开发,vue 自定义指令过滤特殊字符
    直播电商平台开发,vue自定义指令过滤特殊字符 /** *@tagsinput只可以輸入数字、字母、汉字 *@examplev-emoji */exportdefault(app)=>{ app.directive('e......
  • Fitter-细节-过滤器拦截路径配置
    Fitter-细节-过滤器拦截路径配置1.具体资源路径:/index.jsp只有访问index.jsp资源时,过滤器才会被执行2.拦截目录:/user/*访问/user下的所有资源时,过滤器都会被执行3......
  • Fitter-细节-web.xml配置方式 Fitter-细节-执行流程&生命周期
    Fitter-细节-web.xml配置方式咱们先把之前写的那个FitterDemo1里面的那个WebFitter注解,注释掉才可以写web.xml<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns......
  • vue.js客服系统实时聊天项目开发(十)过滤xss字符内容-防止xss攻击
    我们在发送消息给用户的时候,都要进行过滤xss字符,xss是跨站脚本攻击,实质上就是发送了html或js代码,现在我们在vue项目中对内容进行一下过滤在vue中安装如下:npminstallxs......