使用过滤器实现敏感词的过滤
来源:互联网 发布:cs1.6自瞄源码 编辑:程序博客网 时间:2024/05/09 12:59
在web开发中,尤其是实现用户动态交互的开发中经常会用到“敏感词”过滤。
用来屏蔽敏感词……
今天我也试着写了写,发现其实思路有很多。我只是写了其中的一种---通过解析XML文件来实现。
当然在xml中存放,敏感词。当用户提交相关信息时,通过解析xml文件,检查是否有xml中所包含的敏感词。如果存在,则屏蔽。
下面的代码只是简单是体现了思路。并没有连接到数据库。也就是说如果实际应用的话,刚好的做法是,当从数据库中提取出文字信息时,在前台页面进行显示时,使用这种思路。这样数据库中存在的就不会是,你屏蔽后的信息。而是用户输入的原信息,只不过是显示的时候,屏蔽罢了。
===============================
前台getContent.jsp文件
========
后台解析XML文件
CharacterWraper.java
===============
用来屏蔽敏感词……
今天我也试着写了写,发现其实思路有很多。我只是写了其中的一种---通过解析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>
<%@ 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(){}
- }
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("**");elseresponse.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 version="1.0" encoding="UTF-8"?><information><content>色情</content><content>反共</content><content>法轮功</content></information>
============================================
其实在上面的实现中还是存在缺点的,就是屏蔽两个字的敏感词。
如果想要屏蔽多个字的敏感词,为了效率起见,可以建立过个xml文件,通过解析不同的xml文件。实现……
===========
再就是其他屏蔽敏感词的方法:
使用配置文件比方说配置一个Sersitive.properties文件.
使用类继承HttpServletResponseWrapper这样,当服务器返回时,就可以截获response里面的信息。
通过重写里面getWriter()方法达到屏蔽的目的。这样,因为是从服务器返回时截获的信息,也不会影响到数据库中信息的存储,也就是说用户输入的是什么,数据库中存储的就是什么。只不过是现实的时候给屏蔽掉罢了……
========
希望这种思路可以供参考!
原文链接:http://blog.csdn.net/jinzi12345678/article/details/7022939
- 使用过滤器实现敏感词的过滤
- 使用过滤器实现敏感词的过滤
- response中 ,通过过滤器 实现敏感词过滤
- 网站敏感词过滤的实现(附敏感词库)
- java 过滤器对敏感词过滤
- 过滤器-过滤敏感词汇
- 【过滤器】(4)过滤器的应用案例:留言板敏感词过滤技术(包装模式)
- php实现敏感词过滤
- 敏感词过滤算法实现
- php实现敏感词过滤
- Java实现敏感词过滤
- Java实现敏感词过滤
- Java实现敏感词过滤
- Java实现敏感词过滤
- Java实现敏感词过滤
- Java实现敏感词过滤
- Java实现敏感词过滤
- Java实现敏感词过滤
- 论函数调用约定(修订版)
- Bean的作用域
- mfc非模态子对话框调用内存泄露问题
- 五大开源服务器软件
- (半转载)Sunday算法(字符串完全匹配)
- 使用过滤器实现敏感词的过滤
- Opengl API简介
- 刚开始使用cocos2d-x时遇到的问题(android版)
- C++ 智能指针详解
- selenium grid
- hdu 3594 (强连通)
- sql 中的case when
- ARM体系结构
- Bean 基于注解的配置