JavaWeb中的filter过滤敏感词汇案例详解

 更新时间:2016年11月19日 14:30:57   作者:借我执拗如少年  
敏感词、文字过滤是一个网站必不可少的功能,本篇文章主要介绍了JavaWeb中的filter过滤敏感词汇案例,具有一定的参考价值,有需要的可以了解一下,

需求:对含有bad.txt中的敏感词汇的句子进行替换,替换成星号

bad.txt放在src目录下

笨蛋
坏蛋

FilterDemo

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 FilterDemo8 implements Filter {
    //读取txt文件时将词汇存入列表
    private List<String> list = new ArrayList<String>();
    public void destroy() {
    }
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //通过代理增强方法
        ServletRequest proxy = (ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //判断方法是否为getParameter
                if (method.getName().equals("getParameter")){
                    String obj = (String) method.invoke(req, args);
                    if (obj != null){
                        //遍历后替换词汇
                        for (String s : list) {
                            if (obj.contains(s)){
                                obj = obj.replaceAll(s,"***");
                            }
                        }
                    }
                    return obj;
                }
                return method.invoke(req,args);
            }
        });
        //放行
        chain.doFilter(proxy,resp);
    }
    public void init(FilterConfig config) throws ServletException {
        //读取文件
        ServletContext context = config.getServletContext();
        //src下的文件真实位置是在WEN-INF/classes下的
        String realPath = context.getRealPath("/WEB-INF/classes/bad.txt");
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(realPath));
            String line = null;
            while ((line = reader.readLine()) != null){
                list.add(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

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("/servletDemo")
public class ServletDemo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String what = request.getParameter("what");
        System.out.println(name + " : " + what);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

到此这篇关于JavaWeb中的filter过滤敏感词汇案例的文章就介绍到这了,更多相关JavaWeb filter过滤敏感词汇内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Maven resrouce下filtering的使用方法

    Maven resrouce下filtering的使用方法

    本文介绍了Maven的resource插件中的filtering功能,该功能用于在构建过程中将资源目录下的文件中的tokens进行参数替换,tokens的来源可以是pom文件中的properties属性或外部的.properties文件,通过这种方式,可以灵活地切换不同开发环境下的配置属性
    2024-11-11
  • maven 环境变量的配置详解

    maven 环境变量的配置详解

    这篇文章主要介绍了maven 环境变量的配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Springboot项目与vue项目整合打包的实现方式

    Springboot项目与vue项目整合打包的实现方式

    这篇文章主要介绍了Springboot项目与vue项目整合打包的实现方式,本文通过两种方式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)

    Spring boot + mybatis + Vue.js 

    这篇文章主要介绍了Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二),非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • Java局部打印效果不同问题解决方案

    Java局部打印效果不同问题解决方案

    这篇文章主要介绍了Java局部打印效果不同问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java C++题解leetcode769最多能完成排序的块

    Java C++题解leetcode769最多能完成排序的块

    这篇文章主要为大家介绍了Java C++题解leetcode769最多能完成排序的块示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 一文秒懂Java enum常见的用法讲解

    一文秒懂Java enum常见的用法讲解

    这篇文章主要介绍了一文秒懂Java enum常见的用法讲解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • java使用正则表达式判断邮箱格式是否正确的方法

    java使用正则表达式判断邮箱格式是否正确的方法

    这篇文章主要介绍了java使用正则表达式判断邮箱格式是否正确的方法,涉及java正则表达式及字符串的相关操作技巧,需要的朋友可以参考下
    2015-07-07
  • Java调用IK分词器进行分词方式,封装工具类

    Java调用IK分词器进行分词方式,封装工具类

    这篇文章主要介绍了Java调用IK分词器进行分词方式,封装工具类,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • SpringBoot实现接口版本控制的示例代码

    SpringBoot实现接口版本控制的示例代码

    这篇文章主要介绍了springboot如何实现接口版本控制,接口版本控制,比如微服务请求中某个接口需要升级,正常做法是升级我们的版本,文中有详细的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2024-03-03

最新评论