APP下载

一种基于Java Web的敏感词过滤方法研究与实现

2017-09-18傅明建

智能计算机与应用 2017年4期
关键词:字符过滤器浏览器

摘要: 本文研究一种基于Java Web的敏感词过滤系统,能够识别敏感词,在客户端用户发送数据时,系统能够自动阻断聊天内容,并且将敏感词替换为指定特殊符号关键词的敏感词。该系统基于 B /S 结构的Java Web分层框架结构进行架构设计,能够在对用户透明的情况下,自动阻断含有敏感词的聊天内容提交,并且将敏感词替换为指定特殊符号关键词。 实验结果表明该系统能够有效阻止含有敏感关键词的聊天内容提交。

关键词: 敏感词过滤; Java Web; 聊天系统; 关键词替换

中图分类号:TP393.08

文献标志码:A

文章编号:2095-2163(2017)04-0021-03

0引言

随着互联网与移动应用的飞速发展和普及,在互联网上的信息量呈现爆炸式增长,这给信息内容質量的监测和过滤带来严峻的考验。目前已有的绝大部分网络监控系统主要针对己经生效的网络信息,不良信息有时候仍然在网上传播。针对网络不良信息过滤中存在的这些问题,基于文本的过滤模式可以依据任何关键词进行搜索并确定其内容性质,具有高度的灵活性,而图片过滤主要是针对色情图片而言,在技术手段和分级上目前仍然呈现可观难度,毕竟如何区分艺术和色情在时下的生活进程中也还有待直接确切的现实争议定论。即使解决了艺术与色情的领域划定,却仍然存在着准确率不高的问题。基于此,本文则依据应用场景的需求,设计研发了一种在信息源头实现敏感词过滤的敏感词过滤系统,提高了在关键词过滤中的时间效率。

[BT4]1B/S体系结构

B/S是Brower/Server的缩写,即浏览器/服务器结构。在这种结构中,客户端不需要开发任何用户界面,而统一采用如IE和火狐等浏览器,通过Web浏览器向Web服务器发送请求,由Web服务器进行处理,并将处理结果逐级传回客户端,综上过程直观表述可如图1所示。这种结构利用不断成熟和普及的浏览器技术来获取原需运行复杂专用软件才能提供输出的强大功能,从而节约了开发成本,是一种全新的软件体系结构,因而已然成为当今应用软件的首选体系结构。

[PS傅明建1.EPS;S*2;X*2,BP#]

2Servlet

Servlet即Java服务小程序,是使用应用程序设计接口以及相关类和方法的Java程序。同时,还可以作为一种插件,嵌入到Web服务器中运行,并可呈现强大功能,Servlet在服务器上运行主要用于支持展开和客户之间的通信,当客户端传来一个Http请求时,通过调用Servlet方法来向客户端发送一个响应。不但可以处理Http请求中的业务逻辑,而且还可以输出HTML代码来显示指定页面。

[BT5]2.1Servlet过滤器

Servlet过滤器与Servlet十分相似,但却具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容,来满足设计开发中的实际需要。对于程序开发人员而言,过滤器实质就是在Web应用服务器上的一个Web应用组件,用于拦截客户端(浏览器)与目标资源的请求,并对这些请求引入一定过滤处理再发送给目标资源,过滤器的处理方式如图2所示。

2.2基于Servlet过滤器的敏感词过滤

Servlet过滤器能够对Servlet容器的请求和响应对象进行检查和修改。过滤器本身并不产生请求和响应对象,而只是提供过滤功能。基于这个特点,本文采用基于Servlet过滤器的方法来研究敏感词过滤,并以聊天系统应用为例(可以适应任何基于Web的系统)来实现敏感词过滤。该方法的步骤设计内容可详述如下。

1)先设计一个简单的聊天室客户端界面,如图3所示,用于通过Http请求提交聊天内容。

2)然后,编写一个Servlet,并部署配置Servlet,用来获得聊天时提交的聊天内容,并辅以后续延展处理,进一步添加到request中。目前,部署Servlet有2种方式:

① 在Web.xml中进行部署Servlet,只要用户请求的URL和的子标记指定的模式匹配,Web服务器就会自动调用该Filter的doFilter()方法;

② 基于注解的方式部署配置Servlet,在Servlet3.0中提供了注解@WebFilter,使得可以不再需要在Web.xml文件中呈现Filter的部署描述。

如果设计了多个过滤器,且过滤器拦截路径相同时,系统将首先按照标记在Web.xml中出现的先后顺序执行过滤器,然后再按照过滤器类名的字典顺序执行注解的过滤器。但在实际的Web工程中,不需要大量开发Filter,因此,采用哪种方式都可快速成熟地部署过滤器。这里为论述简明清晰起见,本文中采用在Web.xml中部署Servlet,部署代码如下:

<!-- Servlet配置 -->

MessageServlet

com.MessageServlet

MessageServlet

/MessageServlet

Servlet设计代码如下:

public class MessageServlet extends HttpServlet {

private static final long serialVersionUID=65368123622 07677194L;

public void doPost(HttpServletRequest request, Http ServletResponse response)

throws ServletException, IOException {

// 獲取标题

String title = request.getParameter("title");

// 获取内容

String content = request.getParameter("content");

// 将标题放置到request中

request.setAttribute("title", title);

// 将内容放置到request中

request.setAttribute("content", content);

// 转发到result.jsp页面

[JP3]request.getRequestDispatcher("index.jsp").forward(request, response);[JP]

}

}

3)最后编写一个Servlet过滤器,并部署配置,将聊天内容中涉及到的敏感字过滤,并将所有敏感字内容替换成“*”。与Servlet一样,部署过滤器目前也有2种方式:一是在Web.xml中部署Filter;一是基于注解的方式部署Filter。为设计高效起见,这里同样采用Web.xml中部署Servlet Filter,Web.xml文件中部署代码如下:

<!-- 过滤器配置 -->

ff_WordFilter

com.ff_WordFilter

encodingGBK

ff_WordFilter

/*

过滤器代码设计如下:

public class ff_WordFilter implements Filter {

// 非法字符数组

private String ff_words[];

// 字符编码

private String encoding;

// 实现Filter接口init()方法

public void init(FilterConfig filterConfig) throws ServletException {

// 获取字符编码

[JP3]encoding = filterConfig.getInitParameter("encoding");[JP]

// 初始化非法字符数组,该字符数组即是需要过滤并替换的非法关键词

ff_words = new String[]{"他妈的","赤裸"};

}

// 实现Filter接口doFilter()方法

public void doFilter(ServletRequest request, Servlet Response response, FilterChain chain) throws IOException, ServletException {

// 判断字符编码是否有效

if (encoding != null) {

// 设置request字符编码

request.setCharacterEncoding(encoding);

// [JP3]将request转换为重写后的Request对象[JP]

[JP4]request = new Request((HttpServletRequest) request);[JP]

// 设置response字符编码

[JP2]response.setContentType("text/html; charset="+encoding);[JP]

}

chain.doFilter(request, response);

}

// 实现Filter接口destroy()方法

public void destroy() {

this.words = null;

this.encoding = null;

}

/* 内部类重写HttpServletRequestWrapper*/

class Request extends HttpServletRequestWrapper{endprint

// 构造方法

public Request(HttpServletRequest request) {

super(request);

}

// 重写getParameter()方法

@Override

public String getParameter(String name) {

// 返回过滤后的参数值

[JP5]return filter(super.getRequest().getParameter(name)); }[JP]

// 重写getParameterValues()方法

@Override

public String[] getParameterValues(String name) {

// 获取所有参数值

String[] values = super.getRequest().getParameter Values(name);

// 通过循环对所有参数值进行过滤

for (int i = 0; i < values.length; i++) {

values[i] = filter(values[i]);

}

// 返回过滤后的参数值

return values;

}

}

/** 过滤非法字符

* @param param 参数值

* @return 过滤后的参数值

*/

public String filter(String param){

try {

// 判断非法字符是否被初始化

if(words != null && ff_words.length > 0){

// 循环替换非法字符

for (int i = 0; i

// 判断是否包含非法字符

if(param.indexOf(ff_words[i]) != -1){

// 将非法字符替换为"****"

param = [WB]param.replaceAll(ff_words[i],

[DW]"****");

} } }

} catch (Exception e) {

e.printStackTrace(); }

return param;

}

[BT4]3结束语

本次研究设计中提出了一种基于Java Web的敏感词过滤系统,能够识别敏感词,在客户端用户发送数据时,系统能够自动阻断聊天内容,并且将敏感词替换为指定特殊符号关键词的敏感词,该系统基于 B /S 结构的Java Web分层框架结构进行架构设计。 实验结果表明该系统能够有效阻止含有敏感关键词的聊天内容提交。

参考文献:

[WTBZ][ST6BZ][HT6SS][1] [ZK(#〗

DUAN Lei, TANG Changjie, ZUO Jie, et al. Selfstudy algorithm for filtering Chinese text content through two layers in Web realtime environment[J]. Journal of Frontiers of Computer Science and Technology, 2011, 5(8):695-706.

[2] 张颖江, 陈驰. WEB 内容过滤方法的研究与应用[J]. 武汉科技学院学报, 2005, 18(4):49-51.

[3] 程卫华 , 尤晋元. 基于内容过滤的反垃圾邮件系统的设计与实现[J]. 安徽大学学报 (自然科学版),2007,31(3):30-33.

[4] 邓一贵, 伍玉英. 基于文本内容的敏感词决策树信息过滤算法[J]. 计算机工程,2014,40(9):300-304.

[5] 薛海伟,田峥,田建伟,等. 邮件敏感字过滤系统研究与实现[J]. 湖南电力,2015,35(2):13-16.

[6] 曹静,刘洁. JSP与servlet开发技术与典型应用教程[M]. 2版. 大连:大连理工大学出版社,2014.

[7] 明日科技. JAVA WEB从入门到精通[M]. 北京:清华大學出版社,2012.[ZK)][FL)]

猜你喜欢

字符过滤器浏览器
Python实现图片转字符画
正则表达式快速入门
图片轻松变身ASCⅡ艺术画
微软发布新Edge浏览器预览版下载换装Chrome内核
针对石化行业过滤器流阻的探讨及研究
花粉过滤器
新型纳米材料过滤器
基于混淆布鲁姆过滤器的云外包隐私集合比较协议
视频监视系统中字符叠加技术的应用
浏览器