Filter审核全网站发送的文字信息
2016-01-09 11:09
656 查看
首先是自定义的文字库,为txt格式,存储在项目的cn.hbsi.words包中,txt文本中,1代表禁用词,2代表审核词,3代表替换词
示例:
1.txt :
禁用词|1
禁用|1
禁用词汇|1
2.txt
审核词|2
审核|2
审核词汇|2
3.txt
替换词|3
替换|3
替换词汇|3
接下来是Filter后台过滤
在web.xml中配置Filter
示例:
1.txt :
禁用词|1
禁用|1
禁用词汇|1
2.txt
审核词|2
审核|2
审核词汇|2
3.txt
替换词|3
替换|3
替换词汇|3
接下来是Filter后台过滤
public class WordsFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest) arg0; HttpServletResponse response=(HttpServletResponse) arg1; Enumeration<String> names=request.getParameterNames(); while(names.hasMoreElements()){ String name=names.nextElement(); String value=request.getParameter(name); if(value==null){ continue; } //判断value中是否包含禁用词 for(String pattern:banWords){ //Pattern正则表达式类 compile()参数为表达式 Pattern p=Pattern.compile(pattern); Matcher m=p.matcher(value); //如果在value中找到与pattern匹配的 if(m.find()){ request.setAttribute("message", "请使用文明用语"); request.getRequestDispatcher("/message.jsp").forward(request, response); //转发后一定要return,否则会往下继续执行 return; } } } chain.doFilter(new MyRequestWords(request), response); } //自定义Request类,重写getParameter()方法 class MyRequestWords extends HttpServletRequestWrapper{ HttpServletRequest request; public MyRequestWords(HttpServletRequest request){ super(request); this.request=request; } @Override public String getParameter(String name) { String value=request.getParameter(name);//审核词或替换词 if(value==null){ return null; } //是否包含审核词 for(String pattern:auditWords){ Pattern p=Pattern.compile(pattern); Matcher m=p.matcher(value); while(m.find()){ String data=m.group(); //替换所有符合条件的词汇,审核词用红色显示 value=value.replaceAll(data, "<font color='red'>"+data+"</font>"); } } //是否包含替换词 for(String pattern:replaceWords){ Pattern p=Pattern.compile(pattern); Matcher m=p.matcher(value); while(m.find()){ String data=m.group(); //替换为***** value=value.replaceAll(data, "*****"); } } return value; } } //三个集合存储三种类型词汇 //禁用词 private List<String> banWords = new ArrayList<String>(); //审核词 private List<String> auditWords = new ArrayList<String>(); //替换词 private List<String> replaceWords = new ArrayList<String>(); @Override public void init(FilterConfig arg0) throws ServletException { try { //类加载器得到txt的路径 String path = WordsFilter.class.getClassLoader() .getResource("cn/hbsi/words").getPath(); File filePath = new File(path); //files就是词库文件的集合 File[] files=filePath.listFiles(); for(File f:files){ //使用字符流一次读取一行 BufferedReader br=new BufferedReader(new FileReader(f)); String line=null; while((line=br.readLine())!=null){ String[] values=line.split("\\|"); //如果拆分出来不是两个字符串则不解析 if(values.length!=2){ continue; } //trim(),去除字符串两边的空格 // 1代表禁用词 // 2代表审核词 // 3代表替换词 if(values[1].trim().equals("1")){ banWords.add(values[0]); }else if(values[1].trim().equals("2")){ auditWords.add(values[0]); }else if(values[1].trim().equals("3")){ replaceWords.add(values[0]); } } } } catch (Exception e) { throw new RuntimeException(e); } } }
在web.xml中配置Filter
<filter> <filter-name>WordsFilter</filter-name> <filter-class>cn.hbsi.web.filter.WordsFilter</filter-class> </filter> <filter-mapping> <filter-name>WordsFilter</filter-name> <!-- 拦截所有 --> <url-pattern>/*</url-pattern> </filter-mapping>
相关文章推荐
- 秒杀系统架构分析与实战
- 学Android开发的人可以去的几个网站
- 集群(cluster)和高可用性(HA)的概念
- 淘宝架构框架
- HBase 系统架构
- 企业架构
- 三种主流的Web服务实现方案简述及比较
- 【逗比作孽呀】网站缓存优化
- Adaboost的几个人脸检测网站
- javaweb:在线聊天网站
- 用Java获取一个网站的基本配置信息
- 秒杀系统架构分析与实战(转)
- 读书笔记-《大型网站技术架构》
- Linux概念架构的理解(转)
- 架构设计的UML图形思考
- 编译器架构的王者LLVM——(12)使用JIT引擎
- 一句css代码让网站变灰
- Hadoop2.0架构
- iOS个人整理05-应用程序的启动流程--视图控制器ViewController的加载过程--MVC架构
- 【IIS】Windows下利用IIS建立网站并实现局域网共享