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

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

时间:2023-02-14 09:45:48浏览次数:42  
标签:敏感 词汇 java String req Filter 过滤 import

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

需求:

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

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

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

 

 分析:

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

  2.放行。传递代理对象

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

 敏感词汇.txt

SensitiWordsFilter类

package com.jstl.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;

@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 (IOException 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() {

    }
}

TextServlet类

package com.jstl.web.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
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,req,Filter,过滤,import
From: https://www.cnblogs.com/wsfj/p/17117938.html

相关文章

  • Vue 局部过滤器和全局过滤器
    Vue过滤器总结:定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)语法:1、注册过滤器:Vue.filter(name,callback)或newVue{filters:{}}2、使用过滤......
  • Filter-案例-登录验证-分析Filter-登录验证-代码实现
    Filter-案例-登录验证-分析需求:1.访问day17_case案例的资源。验证其是否登录2.如果登录了,则直接放行。3.如果没有登录,则跳转到登录页面,提示"您尚未登录,请......
  • Filter的是实现方式
    1、实现Filter接口或者继承Filter接口的实现类,使用@Component或者@Configuration注解注册到Spring​中importorg.springframework.stereotype.Component;importjavax.ser......
  • Servlet_2_过滤器
    使用过滤器,可以对请求数据进行处理后再交给servlet,也可以对servlet的响应数据进行处理后再交给浏览器。  一、基本知识声明周期:与服务器共存亡。使用步骤:......
  • Filter概述、Filter快速入门
    Filter概述生活中的过滤器:净水器,空气净化器web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能过滤器的作用:一般用于完成通用的操作:登录验......
  • 关于filter_input函数
    PHP:filter_input <?php$search_html=filter_input(INPUT_GET,'search',FILTER_SANITIZE_SPECIAL_CHARS);$search_url=filter_input(INPUT_GET,'search',FILT......
  • 封装函数用于过滤一个数组内重复的元素(数组去重),返回去重之后的数组,js
    //方法一vararr1=[2,4,"a","b","c",1,2,2,5,"a","b"];functionunique(arr){vartempArr=[];for(vari......
  • gateway网关的断言(predicate)和过滤(filter)
    文章目录​​1、GateWay路由断言工厂​​​​1.1AfterRoutePredicateFactory​​​​1.2BeforeRoutePredicateFactory​​​​1.3BetweenRoutePredicateFactory......
  • 过滤器配置详解
    拦截路径配置1具体资源路径:/index.jsp只有访问index.jsp资源时,过滤器才会被执行2拦截目录:/user/*访问/user下的所有资源时过滤器都会被执行3后缀名拦......
  • Filter过滤器 快速入门
    Filter过滤器举例:饮水机空调 web中的过滤器:当访问服务器的资源时过滤器可以将请求拦截下来完成一些特殊功能过滤器的作用一般用来完成通过的操作如......