`
_Yggd
  • 浏览: 89857 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

论坛敏感字过滤的方法

 
阅读更多
对于java servlet而言论坛敏感语言的过滤可以用自己的过滤器实现:
就是用别的字来替代敏感字就行了,实现方法如下,如果有更好的方法,希望各位路过的
大神能指点指点

首先继承HttpServletRequestWrapper类,重写父类方法,
对于其中的 public String getParameter和 public String getParameterValue进行重写
因为后台代码就是根据这两个的方法和前台的数据进行交互的。
自己还可以再写一个replace,进行敏感字的过滤。
方法如下:



public String replace(String str) {
StringBuffer sb = new StringBuffer(str);
Set<String> keys = this.getMap().keySet();
Iterator<String> it = keys.iterator();
String ss = null;
while (it.hasNext()) {
    String key = it.next();
    System.out.println("key=" + key);
    int index = sb.indexOf(key);
    System.out.println("index=" + index);
    if (index != -1) {
if (key != null) {
    ss = key;
}
sb.replace(index, index + key.length(), this.getMap().get(key));
    }
}
System.out.println("ss=" + ss);
System.out.println("过滤后的content=" + sb.toString());
if (ss != null) {
    if (sb.toString().indexOf(ss) == -1) {
return sb.toString();
    } else {
System.out.println("进来了!");
return replace(sb.toString());
    }
}
return sb.toString();
    }
代码中的Map是敏感字:
可以把敏感字编辑在文件中
如图:


然后在自己的过滤器中重构request对象,这样就可以进行敏感字过滤了
具体代码如下:


web.xml配置如下:

    <filter>
<filter-name>WordsFilter</filter-name>
<filter-class>com.fyz.****.WordsFilter</filter-class>
<init-param>
    <param-name>filePath</param-name>
    <param-value>/WEB-INF/word.txt</param-value>
</init-param>
    </filter>
    <filter-mapping>
<filter-name>WordsFilter</filter-name>
<url-pattern>/checkLogin_Note</url-pattern>
    </filter-mapping>



重构的request:
package com.fyz.***.wrapper;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class HttpReqWrapper extends HttpServletRequestWrapper {

    private Map<String, String> map = null;

    public HttpReqWrapper(HttpServletRequest request) {
super(request);
    }
    //过滤脏话

    public String replace(String str) {
StringBuffer sb = new StringBuffer(str);
Set<String> keys = this.getMap().keySet();
Iterator<String> it = keys.iterator();
String ss = null;
while (it.hasNext()) {
    String key = it.next();
    System.out.println("key=" + key);
    int index = sb.indexOf(key);
    System.out.println("index=" + index);
    if (index != -1) {
if (key != null) {
    ss = key;
}
sb.replace(index, index + key.length(), this.getMap().get(key));
    }
}
System.out.println("ss=" + ss);
System.out.println("过滤后的content=" + sb.toString());
if (ss != null) {
    if (sb.toString().indexOf(ss) == -1) {
return sb.toString();
    } else {
System.out.println("进来了!");
return replace(sb.toString());
    }
}
return sb.toString();
    }

// 重写getParameter()方法
    public String getParameter(String str) {

    String content = super.getParameter(str);
    System.out.println("还没过滤的content=" + content);
    return replace(content);

    }

    public Map<String, String> getMap() {
return map;
    }

    public void setMap(Map<String, String> map) {
this.map = map;
    }
}


自己的过滤器:



package com.fyz.***..filter;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import com.lovo.cq.shoppingbook.wrapper.HttpReqWrapper;

public class WordsFilter implements Filter {

    private Map<String, String> map = new HashMap<String, String>();
    //过滤器的初始化

    public void init(FilterConfig config) throws ServletException {
String filePath = config.getInitParameter("filePath");//从配置文件中取得文件的相对路径
ServletContext context = config.getServletContext();
String realPath = context.getRealPath(filePath);//根据相对路径取得绝对路径
try {
    FileReader freader = new FileReader(realPath);//根据绝对路径,通过文件流来读取文件
    BufferedReader br = new BufferedReader(freader);
    String line = null;
    while ((line = br.readLine()) != null) {
String[] str = line.split("=");
map.put(str[0], str[1]);
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}


    }

    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
//乱码处理
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
HttpServletRequest HttpReq = (HttpServletRequest) request;
HttpReqWrapper hrw = new HttpReqWrapper(HttpReq);
hrw.setMap(map);
chain.doFilter(hrw, response);
    }

    public void destroy() {
System.out.println("--过滤器的销毁--");
    }
}



本文中的乱码处理的不够详细,具体的乱码处理,可以一并在request的重写方法中
public String getParameter和 public String getParameterValue进行重写
然后如果想进行压缩流处理(本人的压缩流理论没有问题,但是问题还是你看前面的博客吧),
请看前面的博客




  • 大小: 6 KB
分享到:
评论

相关推荐

    asp.net 敏感关键字过滤

    在描述中提到的过滤关键字列表是一种常见的方法,用于限制或阻止这些潜在危险的字符或词汇。 在ASP.NET中实现敏感关键字过滤,开发者通常会创建一个包含一系列敏感词的数组或集合,然后在用户输入数据进行处理前,...

    C# 敏感字过滤实例 内含敏感字字典两个(字或词都可过滤)

    C#敏感字过滤源码,里面有两个敏感词过滤字典,源码是winform程序的,下载了就可以进行测试,也可以自己在敏感字字典内加入自己需要过滤的内容。

    springBoot-java敏感词语过滤类

    在Spring Boot应用中,开发人员经常需要处理文本内容,其中包括检查和过滤可能存在的敏感词语。这个"springBoot-java敏感词语过滤类"是一个实用的工具类,用于帮助开发者实现在Java环境中对用户输入或者系统文本进行...

    一种基于语音识别的直播视频敏感内容过滤方法及装置.docx

    一种基于语音识别的直播视频敏感内容过滤方法及装置 该发明主要关注于直播视频内容的安全性和合规性,尤其是在实时互动的直播环境中,如何有效监测并过滤掉潜在的敏感或不适宜的内容。直播视频已经成为现代互联网...

    过滤敏感汉字字符

    2. 过滤方法: - 黑名单过滤:创建一个包含敏感字符的黑名单列表,对输入文本进行遍历,一旦发现匹配的字符就进行替换或删除。 - 白名单过滤:只允许特定的字符或词汇通过,所有不在白名单中的字符都会被过滤掉,...

    web过滤敏感字一览

    一个web过滤敏感字内容详解,方法和使用。非常不错。

    论坛需要过滤的不良词语大全

    "论坛需要过滤的不良词语大全"是一个针对这一需求的资源集合,它包含了广泛用于论坛过滤系统的词汇列表。 这个压缩包中的"论坛需要过滤的不良词语大全.txt"文件,很可能是列举了大量可能被视为不适宜、攻击性、诽谤...

    敏感词汇过滤

    3. **规避过滤**:用户可能会使用谐音字、错别字或特殊符号来规避过滤,因此系统需具备一定的智能分析能力。 4. **误判**:过滤系统应尽量减少误判,避免正常内容被误识别为敏感信息。 总结,"敏感词汇过滤"是Java...

    文字过滤(ajax+jquery+servlet)

    本示例中的"文字过滤(ajax+jquery+servlet)"项目,就是利用Ajax、jQuery和Servlet来实现这样一个功能,它能在用户提交评论前自动检查并替换特定文字,例如将“人”字换成“我”。 **Ajax技术** Ajax...

    oracle过滤数字

    在Oracle中,可以通过多种方法来过滤字符串中的数字。这些方法主要利用了Oracle提供的内置函数,如`TRANSLATE()`、`TRIM()`等。下面逐一介绍这些函数及其应用场景: 1. **`TRANSLATE()` 函数**: - **定义**:`...

    Node.js-清理脏话敏感字的Node模块

    标题 "Node.js-清理脏话敏感字的Node模块" 暗示了这是一个关于使用Node.js来处理文本,特别是过滤或替换不雅词汇和敏感字的解决方案。在Node.js环境中,我们可以利用JavaScript的灵活性和丰富的社区资源来创建这样的...

    java中servlet文字过滤器

    3. **安全过滤**:过滤敏感字符,防止SQL注入、跨站脚本攻击等。 4. **性能优化**:例如,开启GZIP压缩,减少网络传输的数据量。 5. **权限控制**:检查用户权限,决定是否允许访问特定资源。 ### 5. 扩展性与灵活...

    过滤敏感词汇1.0版——仅仅是最简单的过滤

    标题中的“过滤敏感词汇1.0版——仅仅是最简单的过滤”指的是一个初步的文本过滤系统,主要用于检测和移除或替换文本中的敏感词汇。在互联网环境中,为了维护网络秩序,防止不良信息传播,这类系统通常被用于论坛、...

    Go-golang敏感词过滤

    "Go-golang敏感词过滤"是一个与文本处理相关的项目,主要关注如何在Go语言中实现对敏感词汇的检测和过滤。在描述中提到的“golang 敏感词过滤”意味着我们需要构建一个服务或库,能够检查输入的文本,找出并替换或者...

    Android 敏感词过滤

    首先,敏感词过滤的基本原理是建立一个敏感词库,这个库通常包含了一系列需要屏蔽或替换的词汇。当用户输入或展示内容时,程序会检查这些词汇是否出现在文本中,并进行相应的处理,如替换为星号、删除或提示用户修改...

    敏感字分析系统java

    ### 敏感字分析系统Java知识点解析 #### 一、项目背景与意义 - **背景**: 在信息时代背景下,互联网的普及使得网络用语成为人们日常交流的重要组成部分。然而,网络环境中存在大量的不文明用语,这对网络环境造成...

    thinkphp5敏感词过滤类

    在网站内容管理中,例如论坛、评论区等,有时需要防止用户发布含有违规或敏感信息的内容。这就需要一套有效的敏感词过滤机制,以便在内容发布前检查并阻止这些词汇。ThinkPHP5的敏感词过滤类就是为此目的设计的。 ...

    java利用DFA算法实现敏感词过滤功能

    敏感词过滤在许多应用程序中都是必要的,例如社交媒体、论坛或博客平台,以防止用户发布不当或有害的内容。以下是对DFA算法及其在Java敏感词过滤中的应用的详细解释。 ### 一、敏感词过滤的重要性 敏感词过滤的...

    Java使用DFA算法实现过滤多家公司自定义敏感字功能详解

    Java使用DFA算法实现过滤多家公司自定义敏感字功能详解主要介绍了Java使用DFA算法实现过滤多家公司自定义敏感字功能,结合实例形式分析了DFA算法的实现原理及过滤敏感字的相关操作技巧。 DFA算法简介 DFA...

Global site tag (gtag.js) - Google Analytics