`

敏感词Filter的实现

阅读更多
首先声明这片文章不是我的原创,我只是为了查遗备缺所以在这里写上。
敏感词的Filter从本质上说是属于一种内容替换Filter。内容替换Filter的工作原理是,在讲Servlet内容输出到Response时,Response将内容缓存起来,在Filter中进行替换,然后再输出到客户端浏览器。由于ServletResponse默认不能严格的缓存输出内容,因此需要自定义一个具备缓存功能的response。扩展javax.servlet.http.HttpServletResponseWrapper类来自定义一个response,该类实现了javax.servlet.http.HttpServletResponse接口的所有方法,根据需要在自己的自定义response中进行覆盖即可。

package com.googlefans.test.filter;

import java.io.CharArrayWriter;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class HttpCharacterResponseWrapper extends HttpServletResponseWrapper{

	private CharArrayWriter charArrayWriter=new CharArrayWriter();

	public CharArrayWriter getCharArrayWriter() {
		return charArrayWriter;
	}

	public HttpCharacterResponseWrapper(HttpServletResponse response){
		super(response);
	}
	@Override
	public PrintWriter getWriter(){
		return new PrintWriter(charArrayWriter);
	}
}


package com.googlefans.test.filter;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

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

public class OutputReplaceFilter implements Filter{

	private Properties pp=new Properties();
	@Override
	public void destroy() {
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpCharacterResponseWrapper response=new HttpCharacterResponseWrapper((HttpServletResponse)res);
		chain.doFilter(req,response);
		String output=response.getCharArrayWriter().toString();
		for(Object obj:pp.keySet()){
			String key=(String)obj;
			output.replace(key,pp.getProperty(key));
		}
		PrintWriter out=res.getWriter();
		out.write(output);
		
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		String file=config.getInitParameter("file");
		String realPath=config.getServletContext().getRealPath(file);
		try {
			pp.load(new FileInputStream(realPath));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}


然后是在web.xml中配置
  <filter>
  	<filter-name>outputReplaceFilter</filter-name>
  	<filter-class>com.googlefans.test.filter</filter-class>
  	<init-param>
  		<param-name>file</param-name>
  		<param-value>/XXX</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>outputReplaceFilter</filter-name>
  	<url-pattern>/*.do</url-pattern>
  </filter-mapping>


至于敏感词properties的文件内容形式
#敏感词语自动替换配置  
色(和谐)情=**  
情(和谐)色=**  
赌(和谐)博=**

分享到:
评论

相关推荐

    filter c++/QT敏感词过滤

    本篇将深入探讨如何在C++与Qt框架下实现敏感词过滤的机制。 首先,让我们了解什么是C++和Qt。C++是一种强大的、面向对象的编程语言,广泛用于系统软件、游戏开发、服务器端应用等领域。Qt则是一个跨平台的应用程序...

    替换敏感词的留言板加filter 和不加filter两种方案

    我们将讨论两种方案:一种是使用`filter`进行敏感词替换,另一种则是不使用`filter`。 首先,`jsp`(JavaServer Pages)是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码,实现服务器端的业务逻辑处理。而`...

    C#敏感词过滤实现方法

    本篇将详细讲解如何使用C#实现敏感词过滤,涉及到字符串操作和数据结构的应用。 首先,敏感词过滤的基本思路是建立一个包含敏感词的列表,然后遍历输入的文本,一旦发现敏感词,就将其替换为非敏感的字符,如星号(*...

    Go-go-wordsfilter是一个高性能的Go敏感词过滤器

    《Go-go-wordsfilter:构建高性能敏感词过滤器的智慧》 在当今信息化社会,文本处理成为了信息安全管理的重要环节,特别是在社交媒体、论坛、博客等网络平台中,对敏感词的过滤与屏蔽至关重要。Go-go-wordsfilter...

    .net 过滤敏感词

    `Filter.cs` 文件很可能是实现敏感词过滤功能的核心代码,它可能包含以下关键部分: 1. **敏感词数据结构**:你可以使用`List&lt;string&gt;`或`HashSet&lt;string&gt;`来存储敏感词。`HashSet`在查找性能上优于`List`,因为它...

    基于DFA算法实现的敏感词屏蔽

    功能介绍 提供一个字符串,即可...text_filter/string命令返回是否存在敏感词以及屏蔽后的字符串 add_new_words/string命令向敏感词库添加新的敏感词 change_text/string命令修改新的敏感词词库,string为新文件的path

    java敏感词过滤

    在`FilterCode`这个压缩包中,可能包含了实现上述功能的Java代码,如敏感词库类、过滤器类、正则表达式工具类等。通过对这些代码的学习和理解,我们可以更好地掌握在Java环境中实现敏感词过滤的技术细节。在实际应用...

    使用lucene4.10,IKAnalyzer5.0提取敏感词

    3. 自定义`StopFilter`:创建一个新的`Filter`类,继承自`Lucene`的`TokenFilter`,并在`incrementToken()`方法中实现敏感词的检查和过滤。 4. 应用`StopFilter`:在建立`Analyzer`实例时,使用自定义的`StopFilter`...

    Go-golang敏感词过滤

    在“filter-service-master”这个项目中,我们可以预期源码包含了实现上述功能的Go代码,可能包括敏感词库的加载、匹配算法的实现、API接口的定义以及测试用例。通过分析和学习这个项目,开发者可以掌握如何在Go中...

    java 敏感词过滤 并显示内容所包含的敏感词

    Java作为一种广泛应用的编程语言,提供了多种实现敏感词过滤的方法。本篇将详细探讨如何在Java中进行敏感词过滤,并展示如何显示内容中包含的敏感词。 首先,我们要理解敏感词过滤的核心原理。敏感词过滤通常基于...

    Android 敏感词过滤

    本文将详细介绍如何在Android应用中实现敏感词过滤,以及如何使用提供的`TestFliter`工具类。 首先,敏感词过滤的基本原理是建立一个敏感词库,这个库通常包含了一系列需要屏蔽或替换的词汇。当用户输入或展示内容...

    JAVA 敏感词过滤

    1. Jieba-Filter:基于Java的jieba分词库,支持敏感词过滤。 2. SensitiveWordFilter:一个简单的Java敏感词过滤库,提供了多种过滤策略。 3. SnowNLP:虽然主要用于中文文本处理,但也可用于敏感词过滤。 在实际...

    Qt实现DFA敏感词过滤

    文件"filter_DFA"可能包含了实现DFA敏感词过滤的具体代码和资源,包括DFA状态的定义、状态转移函数、敏感词库处理、以及Qt界面与DFA逻辑的集成。分析这些文件可以帮助你更深入地理解实际项目的实现细节。 总的来说...

    敏感词过滤器(富含3000词汇)

    `filterwords.txt`文件则包含了敏感词列表,这是一个纯文本文件,通常以一种简单的格式(如每行一个词或词组)存储敏感词汇。程序在运行时会读取这个文件,然后与用户输入的数据进行比对,一旦发现匹配的敏感词,就...

    注解敏感词过滤.rar

    此外,为了提高性能,敏感词过滤逻辑可以进行优化,比如使用布隆过滤器(Bloom Filter)来快速判断一个词是否可能是敏感词,从而减少不必要的精确匹配操作。 总之,通过AOP进行参数预处理的敏感词过滤是一种强大的...

    Golang基于DFA算法实现的敏感词过滤

    【作品名称】:Golang基于DFA算法实现的敏感词过滤 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于DFA算法; ...

    网络敏感词检测----SensitivewordFilter-匹配度低,速度快

    在网络安全和信息审查领域,网络敏感词检测是一个重要的技术手段,用于识别并过滤掉可能引起争议或不适当的内容。本文将深入探讨SensitivewordFilter这一工具,它以其匹配度低、速度快的特点,成为了敏感词过滤领域...

    Java DFA算法实现敏感词、广告词过滤源码(导入即可用)

    在这个Java实现中,`sensitivewd-filter`可能是项目的核心库,包含实现DFA的关键类和方法。而`Maven Webapp`表明这个项目是基于Maven构建的Web应用,这意味着它遵循了Maven的标准目录结构,包含`pom.xml`配置文件,...

    浅谈Python 敏感词过滤的实现

    本文将深入探讨两种Python敏感词过滤的实现方式:NaiveFilter和BSFilter。 首先,我们来看NaiveFilter类。这个简单的实现主要依赖于Python的基本字符串操作。`__init__`方法初始化一个空的关键词集合。`parse`方法...

Global site tag (gtag.js) - Google Analytics