在管理论坛或网站时,为了管理论坛或网站文明用语,屏蔽一些脏话或敏感词汇,需要对敏感词汇进行过滤。这是可以通过过滤器来管理全站用户提交的数据,对用户提交的数据进行敏感词汇识别。为了完成此功能,可以对有request容器带上来的数据进行过滤,reqeust本身无此功能,但可以通过对其进行适当增强,可以完成此功能。下面是示例代码。
DirtyWordsRequest是对敏感词汇进行过滤的增强型request
public class DirtyWordsRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
private String[] dirtyWords = {"aa", "bbb", "ccc"};
public DirtyWordsRequest(HttpServletRequest request) {
super(request);
// TODO Auto-generated constructor stub
this.request = request;
}
@Override
public String getParameter(String name) {
// TODO Auto-generated method stub
String value = request.getParameter(name);
if(value==null){
return null;
}
for(int i=0; i<dirtyWords.length; i++){
value = value.replaceAll(dirtyWords[i], "***");
}
return value;
}
}
Filter,放行时,使用DirtyWordsRequest对象实体,进行放行。
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
DirtyWordsRequest myRequest = new DirtyWordsRequest(request);
myRequest.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(myRequest, response);
}
为了是request对象同时具有解决乱码,识别html格式,过滤敏感词汇,可以在访问真正资源前,分别为其增加一个过滤器,如下:
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter>
<filter-name>HtmlFilter</filter-name>
<filter-class>cn.itcast.filters.HtmlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HtmlFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter>
<filter-name>DirtyFilter</filter-name>
<filter-class>cn.itcast.filters.DirtyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DirtyFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
此时全站的请求访问本站的web资源的乱码问题,html格式数据问题,及敏感词汇问题都将得以解决。