博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb开发之Filter实现过滤非法文字
阅读量:5811 次
发布时间:2019-06-18

本文共 2777 字,大约阅读时间需要 9 分钟。

hot3.png

一、概述

在论坛或者网站中,我们会发现一些用户发表一些不文明或者非法的文字。这样可能导致论坛的不文明和谐,甚至还可能带来一些法律上的纠纷。我们可以使用过滤器来帮助我们过滤掉这些不文明的文字。

二、思路

统一维护非法文字,为了提高程序运行效率,可以将其缓存到内存中。当用户提交请求后,利用过滤器对指定程序(如发表言论)请求的内容进行过滤。发现有非法字符后替换成合法字符(如“*”)。

三、具体实现

keyword.properties

讨哥=**荡漾=xx

这里我们使用properties文件保存非法字符。

key是非法文字,value是要被替换后的文字。

ContentFilter.java

package cn.heimar.filter.contentfilter.util;import java.io.IOException;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.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ContentFilter implements Filter {	@Override	public void init(FilterConfig config) throws ServletException {		// TODO Auto-generated method stub	}	@Override	public void doFilter(ServletRequest req, ServletResponse resp,			FilterChain chain) throws IOException, ServletException {		HttpServletRequest request = (HttpServletRequest) req;		HttpServletResponse response = (HttpServletResponse) resp;		//思路:得到提交数据,替换,重新设置进去		//使用包装对象来包裹原请求对象		//如果是第一次请求,则加载关键字,缓存到ServletContext		ContentReplaceHttpServletRequestWapper wapper=new ContentReplaceHttpServletRequestWapper(request);		chain.doFilter(wapper, resp);	}	@Override	public void destroy() {		// TODO Auto-generated method stub	}}

ContentReplaceHttpServletRequestWapper.java

package cn.heimar.filter.contentfilter.util;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Properties;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;/** * 使用装饰模式,来修改getParameter方法返回的参数值 *  * @author yan *  */public class ContentReplaceHttpServletRequestWapper extends		HttpServletRequestWrapper {	private static Properties keywords;	static {		keywords = new Properties();		try {			keywords.load(ContentReplaceHttpServletRequestWapper.class					.getClassLoader().getResourceAsStream("keyword.properties"));		} catch (IOException e) {			e.printStackTrace();		}	}	public ContentReplaceHttpServletRequestWapper(HttpServletRequest request) {		super(request);	}	@Override	public String getParameter(String name) {        //content和name是要过滤的请求参数名称		if ("content".equals(name) || "title".equals(name)) {			String old = super.getParameter(name);			old = doFilter(old);			return old;		}		return super.getParameter(name);	}	private String doFilter(String old) {		for (Object temp : keywords.keySet()) {			try {				String key = new String(((String) temp).getBytes("ISO-8859-1"),"UTF-8");				old = old.replaceAll(key, keywords.getProperty((String)temp));			} catch (UnsupportedEncodingException e) {				e.printStackTrace();			}		}		return old;	}}

转载于:https://my.oschina.net/hongdengyan/blog/182031

你可能感兴趣的文章
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
【转】inittab文件
查看>>
Java设计模式
查看>>
一文读懂 AOP | 你想要的最全面 AOP 方法探讨
查看>>
ndk制作so库,ndk-build不是内部或外部命令。。。的错误
查看>>
Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin
查看>>
ORM数据库框架 SQLite 常用数据库框架比较 MD
查看>>
Razor 模板引擎的使用
查看>>
tf.nn.sigmoid_cross_entropy_with_logits
查看>>
文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类...
查看>>
使用SQL语句如何实现条件判断
查看>>
大数据的十大热门趋势
查看>>
EMQ配置
查看>>
解压缩软件中如何提前设置文件存储名称相冲突的解决方法
查看>>
(原創) 如何判斷一個字串是否存在於另外一個字串? (C/C++) (C)
查看>>
栈的模拟运用 SOJ3897 dance2
查看>>
Windows Azure Storage (9) Windows Azure 上的托管服务CDN (中) Blob Service
查看>>