Filter审核全网站发送的文字信息

首先是自定义的文字库,为txt格式,存储在项目的cn.hbsi.words包中,txt文本中,1代表禁用词,2代表审核词,3代表替换词

示例:
1.txt :
禁用词|1
禁用|1
禁用词汇|1

2.txt
审核词|2
审核|2
审核词汇|2

3.txt
替换词|3
替换|3
替换词汇|3

接下来是Filter后台过滤

public class WordsFilter implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request=(HttpServletRequest) arg0;
        HttpServletResponse response=(HttpServletResponse) arg1;

         Enumeration<String> names=request.getParameterNames();
         while(names.hasMoreElements()){
             String name=names.nextElement();
             String value=request.getParameter(name);
             if(value==null){
                 continue;
             }
             //判断value中是否包含禁用词
             for(String pattern:banWords){
                 //Pattern正则表达式类    compile()参数为表达式
                 Pattern p=Pattern.compile(pattern);
                 Matcher m=p.matcher(value);
                 //如果在value中找到与pattern匹配的
                 if(m.find()){
                     request.setAttribute("message", "请使用文明用语");
                     request.getRequestDispatcher("/message.jsp").forward(request, response);
                     //转发后一定要return,否则会往下继续执行
                     return;
                 }
             }
         }
         chain.doFilter(new MyRequestWords(request), response);      
    }

    //自定义Request类,重写getParameter()方法
    class MyRequestWords extends HttpServletRequestWrapper{
        HttpServletRequest request;
        public MyRequestWords(HttpServletRequest request){
            super(request);
            this.request=request;
        }
        @Override
        public String getParameter(String name) {
            String value=request.getParameter(name);//审核词或替换词
            if(value==null){
                return null;
            }
            //是否包含审核词
            for(String pattern:auditWords){
                 Pattern p=Pattern.compile(pattern);
                 Matcher m=p.matcher(value);
                 while(m.find()){
                     String data=m.group();
                     //替换所有符合条件的词汇,审核词用红色显示
                     value=value.replaceAll(data, "<font color='red'>"+data+"</font>");
                 }
             }

            //是否包含替换词
            for(String pattern:replaceWords){
                 Pattern p=Pattern.compile(pattern);
                 Matcher m=p.matcher(value);
                 while(m.find()){
                     String data=m.group();
                     //替换为*****
                     value=value.replaceAll(data, "*****");
                 }
             }

            return value;
        }

    }

    //三个集合存储三种类型词汇
    //禁用词
    private List<String> banWords = new ArrayList<String>();
    //审核词
    private List<String> auditWords = new ArrayList<String>();
    //替换词
    private List<String> replaceWords = new ArrayList<String>();

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        try {
            //类加载器得到txt的路径
            String path = WordsFilter.class.getClassLoader()
                    .getResource("cn/hbsi/words").getPath();
            File filePath = new File(path);
            //files就是词库文件的集合
            File[] files=filePath.listFiles();
            for(File f:files){
                //使用字符流一次读取一行
                BufferedReader br=new BufferedReader(new FileReader(f));
                String line=null;
                while((line=br.readLine())!=null){
                    String[] values=line.split("\\|");
                    //如果拆分出来不是两个字符串则不解析
                    if(values.length!=2){
                        continue;
                    }
                    //trim(),去除字符串两边的空格
                    // 1代表禁用词
                    // 2代表审核词
                    // 3代表替换词
                    if(values[1].trim().equals("1")){
                        banWords.add(values[0]);
                    }else if(values[1].trim().equals("2")){
                        auditWords.add(values[0]);
                    }else if(values[1].trim().equals("3")){
                        replaceWords.add(values[0]);
                    }
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}

在web.xml中配置Filter

<filter>
    <filter-name>WordsFilter</filter-name>
    <filter-class>cn.hbsi.web.filter.WordsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>WordsFilter</filter-name>
    <!-- 拦截所有 -->
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值