使用过滤器实现敏感词的过滤
2011-11-29 12:31
429 查看
在web开发中,尤其是实现用户动态交互的开发中经常会用到“敏感词”过滤。
用来屏蔽敏感词……
今天我也试着写了写,发现其实思路有很多。我只是写了其中的一种---通过解析XML文件来实现。
当然在xml中存放,敏感词。当用户提交相关信息时,通过解析xml文件,检查是否有xml中所包含的敏感词。如果存在,则屏蔽。
下面的代码只是简单是体现了思路。并没有连接到数据库。也就是说如果实际应用的话,刚好的做法是,当从数据库中提取出文字信息时,在前台页面进行显示时,使用这种思路。这样数据库中存在的就不会是,你屏蔽后的信息。而是用户输入的原信息,只不过是显示的时候,屏蔽罢了。
===============================
前台getContent.jsp文件
========
后台解析XML文件
CharacterWraper.java
===============
XML敏感词存储Infor.xml文件
=================
============================================
其实在上面的实现中还是存在缺点的,就是屏蔽两个字的敏感词。
如果想要屏蔽多个字的敏感词,为了效率起见,可以建立过个xml文件,通过解析不同的xml文件。实现……
===========
再就是其他屏蔽敏感词的方法:
使用配置文件比方说配置一个Sersitive.properties文件.
使用类继承HttpServletResponseWrapper这样,当服务器返回时,就可以截获response里面的信息。
通过重写里面getWriter()方法达到屏蔽的目的。这样,因为是从服务器返回时截获的信息,也不会影响到数据库中信息的存储,也就是说用户输入的是什么,数据库中存储的就是什么。只不过是现实的时候给屏蔽掉罢了……
========
希望这种思路可以供参考!
用来屏蔽敏感词……
今天我也试着写了写,发现其实思路有很多。我只是写了其中的一种---通过解析XML文件来实现。
当然在xml中存放,敏感词。当用户提交相关信息时,通过解析xml文件,检查是否有xml中所包含的敏感词。如果存在,则屏蔽。
下面的代码只是简单是体现了思路。并没有连接到数据库。也就是说如果实际应用的话,刚好的做法是,当从数据库中提取出文字信息时,在前台页面进行显示时,使用这种思路。这样数据库中存在的就不会是,你屏蔽后的信息。而是用户输入的原信息,只不过是显示的时候,屏蔽罢了。
===============================
前台getContent.jsp文件
========
<%@ page language="java" contentType="text/html;charset=utf-8" %> <html> <head><title>发表你的观点</title> <script type="text/javascript" language="javascript"> function getTe() { if(document.getElementById("te").value.length <= 4) { alert("100字以内"); return false } return true; } </script> </head> <body> <center> <fieldset style="width:300px;"> <legend>我的观点</legend> <form action="CharacterWrapper" method="post" onsubmit="return getTe()"> <input type="text" name="te" value="100字以内" id="te" style="width:200px;height:150px;borderColor:blue"/><br/> <input type="submit" value="提 交" style="margin-left:120px"/> </form> </fieldset> </center> </body> </html>
后台解析XML文件
CharacterWraper.java
===============
package cn.edu.bzu; import java.io.File; 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; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class CharacterWrapper implements Filter{ public void init(FilterConfig config){} public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)throws IOException,ServletException{ HttpServletRequest request=(HttpServletRequest)req; HttpServletResponse response=(HttpServletResponse)resp; /*先去字串再比对*/ String getContent=request.getParameter("te"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //使用DOM解析XML //首先获得DOM解析工厂,工厂的作用是用来创建DOM解析器 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); try { //获得DOM解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //解析xml文件,获取Documnet对象根节点 Document document=builder.parse(new File("../Infor.xml")); //创建节点集 NodeList list=document.getElementsByTagName("information"); //使用for循环对输入的文字进行比对过滤 for(int i=0;i<list.getLength();i++){ //将节点集中的每一个节点转化为元素 Element e=(Element)list.item(i); //得到孩子节点,并得到其值 String content=e.getElementsByTagName("content").item(0).getFirstChild().getNodeValue(); for(int j=0;j<getContent.length();j++){ if(j==getContent.length()-2) break; if(content.equals(getContent.substring(j,j+2))) response.getWriter().print("**"); else response.getWriter().print(getContent.substring(j,j+2)); } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); }finally{ chain.doFilter(req, resp); } } public void destroy(){} }
XML敏感词存储Infor.xml文件
=================
<?xml version="1.0" encoding="UTF-8"?> <information> <content>***</content> <content>反共</content> <content>法轮功</content> </information>
============================================
其实在上面的实现中还是存在缺点的,就是屏蔽两个字的敏感词。
如果想要屏蔽多个字的敏感词,为了效率起见,可以建立过个xml文件,通过解析不同的xml文件。实现……
===========
再就是其他屏蔽敏感词的方法:
使用配置文件比方说配置一个Sersitive.properties文件.
使用类继承HttpServletResponseWrapper这样,当服务器返回时,就可以截获response里面的信息。
通过重写里面getWriter()方法达到屏蔽的目的。这样,因为是从服务器返回时截获的信息,也不会影响到数据库中信息的存储,也就是说用户输入的是什么,数据库中存储的就是什么。只不过是现实的时候给屏蔽掉罢了……
========
希望这种思路可以供参考!
相关文章推荐
- 使用过滤器实现敏感词的过滤
- javaWed项目中用过滤器实现转码功能,敏感词汇过滤更能,处理Get和Post接收数据中的中文乱码问题以及敏感词汇的处理
- java敏感词过滤-使用HashMap实现DFA算法
- java敏感词过滤-使用HashMap实现DFA算法
- java敏感词过滤-使用HashMap实现DFA算法
- Java使用DFA算法实现过滤多家公司自定义敏感字功能详解
- 【lucene系列学习四】使用IKAnalyzer分词器实现敏感词和停用词过滤
- java敏感词过滤-使用HashMap实现DFA算法
- response中 ,通过过滤器 实现敏感词过滤
- Java使用DFA算法实现敏感词过滤
- Java实现敏感词过滤 - DFA算法
- IMX6之openwrt使用dnsmasq实现广告过滤
- C#敏感词过滤算法实现
- 详解JavaEE使用过滤器实现登录(用户自动登录 安全登录 取消自动登录黑用户禁止登录)
- Java实现敏感词过滤
- 用过滤器对jsp页面中的敏感字段进行过滤
- java 过滤器对敏感词过滤
- java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)
- 第103课:动手实战联合使用Spark Streaming、Broadcast、Accumulator实现在线黑名单过滤和计数