您的位置:首页 > 运维架构 > 网站架构

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

2016-01-09 11:09 656 查看
首先是自定义的文字库,为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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: