首先声明这片文章不是我的原创,我只是为了查遗备缺所以在这里写上。
敏感词的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的文件内容形式
#敏感词语自动替换配置
色(和谐)情=**
情(和谐)色=**
赌(和谐)博=**
分享到:
相关推荐
本篇将深入探讨如何在C++与Qt框架下实现敏感词过滤的机制。 首先,让我们了解什么是C++和Qt。C++是一种强大的、面向对象的编程语言,广泛用于系统软件、游戏开发、服务器端应用等领域。Qt则是一个跨平台的应用程序...
我们将讨论两种方案:一种是使用`filter`进行敏感词替换,另一种则是不使用`filter`。 首先,`jsp`(JavaServer Pages)是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码,实现服务器端的业务逻辑处理。而`...
本篇将详细讲解如何使用C#实现敏感词过滤,涉及到字符串操作和数据结构的应用。 首先,敏感词过滤的基本思路是建立一个包含敏感词的列表,然后遍历输入的文本,一旦发现敏感词,就将其替换为非敏感的字符,如星号(*...
《Go-go-wordsfilter:构建高性能敏感词过滤器的智慧》 在当今信息化社会,文本处理成为了信息安全管理的重要环节,特别是在社交媒体、论坛、博客等网络平台中,对敏感词的过滤与屏蔽至关重要。Go-go-wordsfilter...
`Filter.cs` 文件很可能是实现敏感词过滤功能的核心代码,它可能包含以下关键部分: 1. **敏感词数据结构**:你可以使用`List<string>`或`HashSet<string>`来存储敏感词。`HashSet`在查找性能上优于`List`,因为它...
功能介绍 提供一个字符串,即可...text_filter/string命令返回是否存在敏感词以及屏蔽后的字符串 add_new_words/string命令向敏感词库添加新的敏感词 change_text/string命令修改新的敏感词词库,string为新文件的path
在`FilterCode`这个压缩包中,可能包含了实现上述功能的Java代码,如敏感词库类、过滤器类、正则表达式工具类等。通过对这些代码的学习和理解,我们可以更好地掌握在Java环境中实现敏感词过滤的技术细节。在实际应用...
3. 自定义`StopFilter`:创建一个新的`Filter`类,继承自`Lucene`的`TokenFilter`,并在`incrementToken()`方法中实现敏感词的检查和过滤。 4. 应用`StopFilter`:在建立`Analyzer`实例时,使用自定义的`StopFilter`...
在“filter-service-master”这个项目中,我们可以预期源码包含了实现上述功能的Go代码,可能包括敏感词库的加载、匹配算法的实现、API接口的定义以及测试用例。通过分析和学习这个项目,开发者可以掌握如何在Go中...
Java作为一种广泛应用的编程语言,提供了多种实现敏感词过滤的方法。本篇将详细探讨如何在Java中进行敏感词过滤,并展示如何显示内容中包含的敏感词。 首先,我们要理解敏感词过滤的核心原理。敏感词过滤通常基于...
本文将详细介绍如何在Android应用中实现敏感词过滤,以及如何使用提供的`TestFliter`工具类。 首先,敏感词过滤的基本原理是建立一个敏感词库,这个库通常包含了一系列需要屏蔽或替换的词汇。当用户输入或展示内容...
1. Jieba-Filter:基于Java的jieba分词库,支持敏感词过滤。 2. SensitiveWordFilter:一个简单的Java敏感词过滤库,提供了多种过滤策略。 3. SnowNLP:虽然主要用于中文文本处理,但也可用于敏感词过滤。 在实际...
文件"filter_DFA"可能包含了实现DFA敏感词过滤的具体代码和资源,包括DFA状态的定义、状态转移函数、敏感词库处理、以及Qt界面与DFA逻辑的集成。分析这些文件可以帮助你更深入地理解实际项目的实现细节。 总的来说...
`filterwords.txt`文件则包含了敏感词列表,这是一个纯文本文件,通常以一种简单的格式(如每行一个词或词组)存储敏感词汇。程序在运行时会读取这个文件,然后与用户输入的数据进行比对,一旦发现匹配的敏感词,就...
此外,为了提高性能,敏感词过滤逻辑可以进行优化,比如使用布隆过滤器(Bloom Filter)来快速判断一个词是否可能是敏感词,从而减少不必要的精确匹配操作。 总之,通过AOP进行参数预处理的敏感词过滤是一种强大的...
【作品名称】:Golang基于DFA算法实现的敏感词过滤 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于DFA算法; ...
在网络安全和信息审查领域,网络敏感词检测是一个重要的技术手段,用于识别并过滤掉可能引起争议或不适当的内容。本文将深入探讨SensitivewordFilter这一工具,它以其匹配度低、速度快的特点,成为了敏感词过滤领域...
在这个Java实现中,`sensitivewd-filter`可能是项目的核心库,包含实现DFA的关键类和方法。而`Maven Webapp`表明这个项目是基于Maven构建的Web应用,这意味着它遵循了Maven的标准目录结构,包含`pom.xml`配置文件,...
本文将深入探讨两种Python敏感词过滤的实现方式:NaiveFilter和BSFilter。 首先,我们来看NaiveFilter类。这个简单的实现主要依赖于Python的基本字符串操作。`__init__`方法初始化一个空的关键词集合。`parse`方法...