频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
javaEE之---------过滤敏感词(filter)
2015-12-25 09:25:45         来源:yangxin_blog的专栏  
收藏   我要投稿

我们在聊天的时候的或者留言的时候,有部分词是不允许发表出来。我们可以采用过滤器实现这个功能。

我们只是简单利用过滤器实现这个过滤的功能,有些地方没写的很全

前台代码:

姓名:
留言内容:

\

 

 

Servlet里面的代码:

仅仅只是把从前台收的数据读取出来。看里面的敏感词是都过滤。

代码:

 

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String name  =request.getParameter("name");//名字
		String text=request.getParameter("textarea");//浏览内容
		PrintWriter pw =response.getWriter();
		pw.println("name="+name);//这里直接输出,仅仅只是为了查看能否过滤那些关键字。。
		pw.print("内容"+text);
	
	}

 

过滤器:

过滤的作用就可以体现了,过滤器的是在客户端访问服务器的之间进行拦截的。

我们知道过滤器能够控制request和response,所以我们能够对这个进行下手。从客户端请求是request,所以我们只需要在半路将其拦截,修改里面的值就可以实现过滤了。采用了包装的设计模式;

过滤器代码:

 

public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req=(HttpServletRequest) request;
		MyFilter myf =new MyFilter(req);
		chain.doFilter(myf, response);//采勇我们加强的类的request,传给后面的servlet使用
	}

 

自己 手动写一个myFilter类来修改里面我们需要用到的函数。

 

class MyFilter  extends HttpServletRequestWrapper{
		//这是采用包装模式
		public MyFilter(HttpServletRequest request) {
			super(request);
		}

		@Override //从写这个方法
		public String getParameter(String name) {
			String words =super.getParameter(name);
			System.out.println(words);//过滤前的文字
			List list=WordUtils.getword();
			for(String ll:list){
				words=words.replace(ll, "*");//敏感词汇采用**代替
			}
			return words;
		}	

 

为了方便维护,我们的敏感词汇的获取专门写了一个工具,方便取,当然也方便管理员添加进去。

 

public class WordUtils {
	//采用单例模式
	private static List list =new ArrayList();//我们可以从这访问数据库中存的敏感词汇,封装成list返回
	static {//手动添加几个
		list.add("坑货");
		list.add("骂人");
		list.add("傻逼");
	}
	
	public static List getword(){
		return list;
	}
	 
	 public static void addWord(String name){
		 list.add(name);
	 }
	 
	 public static void sava(){
		 //这里可以list里面的数据存到数据库中,方便维护,当然也可以写增删改查等
	 }

在这里,只要含有这个词的,全部会变成*

效果图;

\

总结:过滤器的强大,可以修改request和response对象一起,你需要调什么函数,我们就可以采用包装设计模式的方式修改这个函数,变成我们想要的效果,这个和代理设计模式有点类似。

点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:从头认识java-14.4 Java数组的实用功能(1)
下一篇:[javase学习笔记]-7.4 构造函数的内存加载
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站