`

过滤敏感词汇1.0版——仅仅是最简单的过滤

阅读更多

   1)比如:fuck, shit, bitch 等其中出现任何一个要--> ****
   2). request 中的 paramsters 不能修改! 所以无法替换
    3). 基本思路:
> 重写 request 的 getParameter() 方法

      * 调用父类的 getParameter() 方法获取字段的值

      * 比较该值是否为不雅词汇, 若为不雅词汇则, 返回 ****

     * 若不是不雅词汇, 正常返回.

   4). 自实现 HttpServletRequest 接口. 失败, 因为自实现的 HttpServletRequest 接口的 getParameter() 方法中, 无法获取字段值. 

   5). 继承 . 失败, 因为通过继承实现的 MyRequestFacade 的构造器中必须有一个 Request 类型的参数, 而我们无法创建该对象.

   6). 思想: 可以吧 4) 和 5) 结合起来

> 实现接口.

> 创建一个带参数的构造器  MyHttpServletRequest(HttpServletRequest request); 为该构造器传入真正的 HttpServletRequest 对象.把该对象赋给 MyHttpServletRequest 类的 HttpServletRequest 类型的成员变量, 使用该成员变量实现接口的方法!
    
         > 该思想同 GenericServlet 实现 ServletConfig 接口

    注意,在代码实现的时候并不是使用6)的方式,而是使用HttpServletRequest 的包装类-->HttpServletRequestWrapper

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="login_process.jsp" method="post">
		Title:<input type="text" name="title"/><br><br>
		Desc:<textarea name="desc" rows="10" cols="21"></textarea><br><br>
		<input type="submit" value="Submit"/>
	</form>

</body>
</html>




login_process.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	Title: <%=request.getParameter("title") %><br><br>
	Desc: <%=request.getParameter("desc") %><br><br>


</body>
</html>



BadWordsFilter.java


package com.syh.filter;

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.HttpServletRequestWrapper;

public class BadWordsFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {

		HttpServletRequest request = (HttpServletRequest) req ;
		
		//HttpServletRequestWrapper 是 HttpServletRequest 的一个包装类
		/*
		 问题:这里为什么要使用包装类呢?(以HttpServletRequest为例)
		  	因为在这个Demo中,我们要过滤敏感词汇,肯定要从 request.getParameter("...") 这个方法中获取页面上输入的内容信息!
		  	因此,只要拿到内容信息,进而判断,然后再用request.setParameter("...")方法替换掉敏感词汇就可以了!
		  	可是问题马上就出现了!在 HttpServletRequest中有 setParameter("...")这个方法吗?--->没有!
		  	不过有 setAttribute()这个方法,可是与我们所希望的没有关系,所以就使用这个 HttpServletRequestWrapper 包装类
		  	至于中间探讨的过程就不用细说了(也没有必要),这里说一点如果我们实现 HttpServletRequest接口,是要将里面的方法全部重写的!可是我们知道如何重写吗?
		  	虽然我们知道我们最终的目标是如何实现的就是重写 getParameter("..."), 可是这个接口中还有其他的方法啊!你知道怎么写吗?即使知道,那是不是也太麻烦了!
		  	所以使用这个包装类,在包装类中实现了HttpServletRequest所有方法,不过一定要记住这是一个类,而不是接口,所以可用继承的方式
		  	进而再覆盖父类中的 getParameter("...") 方法,最后达到我们的目的
		 */
		HttpServletRequestWrapper request2 = new BadWordsWrapper(request) ;
		chain.doFilter(request2, resp) ;
		
	}

	@Override
	public void destroy() {

	}

}




BadWordsWrapper


package com.syh.filter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class BadWordsWrapper extends HttpServletRequestWrapper {

	private HttpServletRequest request ;
	
	public BadWordsWrapper(HttpServletRequest request) {
		super(request);
		this.request = request ;
	}
	
	@Override
	public String getParameter(String name) {
		// * 调用父类的 getParameter() 方法获取字段的值
		String title = request.getParameter(name) ;
		// * 比较该值是否为不雅词汇, 若为不雅词汇则, 返回 ****
		if("fuck".equals(title)) {
			return "****";
		}
		// * 若不是不雅词汇, 正常返回.
		return title ;
		
	}

}




web.xml(仅仅部分)


<filter>
  	<filter-name>BadWordsFilter</filter-name>
  	<filter-class>com.syh.filter.BadWordsFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>BadWordsFilter</filter-name>
  	<url-pattern>/login_process.jsp</url-pattern>
  </filter-mapping>

分享到:
评论

相关推荐

    CS90组播配置工具v1.0.1.0

    版本号:1.0.1.0——更新说明 1、修复接收到激活设备信息时, 取消重启事件 2、修改应用名称为OCS组播配置工具 3、优化已知应用设备过滤逻辑 版本号:1.0.0.23——更新说明 1、新增刷新网卡信息按钮 版本号:1.0....

    敏感词汇过滤sql数据

    敏感词汇sql文件,可用于对平台用户在不平场景下进行的昵称设置等进行过滤

    过滤敏感词汇的laravel包使用DFA算法

    本话题聚焦于一个特定的Laravel包,该包专门用于过滤敏感词汇,并且采用了DFA(Deterministic Finite Automaton,确定有限状态自动机)算法。DFA算法在文本处理、模式匹配等领域有着广泛的应用,尤其在过滤或检测...

    文本过滤NHtmlFilter v1.0源码2012811

    文本过滤NHtmlFilter v1.0源码 源码描述: 开发环境:vs2008 开源代码NHtmlFilter 过滤Html危险脚本 防止XSS攻击 如何防止XSS攻击,在.net做web开发上真的很弱。 底层框架,基础类库是很不完善。又是做互联网应用,...

    敏感词汇过滤源代码

    在IT行业中,敏感词汇过滤是一项重要的技术,尤其在社交媒体、论坛、评论系统等需要监管不当内容的场景下。本文将详细解析如何利用Java实现敏感词过滤,并探讨其工作原理和应用。 首先,我们要理解敏感词汇过滤的...

    敏感词汇过滤

    "敏感词汇过滤"是一种常见的技术手段,主要用于防止不适当、攻击性或非法内容的出现。在Java编程环境中,我们可以构建这样的系统来实现这一目标。下面将详细介绍这个主题,并结合给定的文件名“敏感词汇过滤”进行...

    Android 敏感词过滤

    首先,敏感词过滤的基本原理是建立一个敏感词库,这个库通常包含了一系列需要屏蔽或替换的词汇。当用户输入或展示内容时,程序会检查这些词汇是否出现在文本中,并进行相应的处理,如替换为星号、删除或提示用户修改...

    敏感词过滤器(富含3000词汇)

    `filterwords.txt`文件则包含了敏感词列表,这是一个纯文本文件,通常以一种简单的格式(如每行一个词或词组)存储敏感词汇。程序在运行时会读取这个文件,然后与用户输入的数据进行比对,一旦发现匹配的敏感词,就...

    dxour.com论坛词语过滤大全

    ———————————————————————————————————————————— | 这些全是人工审核的, | | 禁止发广告、禁止发发动言论, | | 禁止严重色情内容,审核较敏感词汇。 | | 替换...

    敏感词过滤.zip

    全词匹配是最基础的方法,即只有当完整词汇出现时才进行拦截。部分匹配则允许关键词的任何部分出现在文本中,例如使用字典树(Trie)数据结构进行快速查找。正则表达式匹配则更为灵活,可以处理复杂模式和变体。 **...

    论坛BBS最新敏感词语不良词语过滤(批量)

    "论坛BBS最新敏感词语不良词语过滤(批量)"这一主题就是针对这一需求提出的解决方案。本文将详细探讨如何在Discuz! 论坛系统中实现批量过滤敏感和不良词语,以及词语过滤的重要性。 Discuz! 是一款广泛应用的开源...

    过滤敏感汉字字符

    在IT行业中,过滤敏感汉字字符是一项重要的数据处理任务,尤其在网络安全、社交媒体监控以及文本分析等领域。这个任务的目的是为了防止或控制不适当、非法或有害的信息传播,确保网络环境的和谐与安全。以下是关于...

    java敏感词过滤(支持指定字段过滤)

    敏感词过滤,又称为关键词屏蔽,是通过对比一个预先定义的敏感词库,检查文本中是否存在这些敏感词汇,如果发现则进行替换、删除或标记处理。这个过程通常涉及字符串匹配算法,例如朴素贝叶斯、Boyer-Moore算法、Aho...

    SQL防注入过滤程序 v1.0

    对非法注入,提交的信息进行详细的记录,方便网站管理员查看非法记录,或删除以前的记录;...加入完善的过滤函数,在线修改过滤函数,自由添加和修改禁止登陆的IP地址; 管理员口令加密;默认密码为 xyxiao

    使用vue搭建 基于协同过滤的美食推荐系统——前台.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系...

    使用hapi框架搭建 基于协同过滤的美食推荐系统——后台.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系...

    AMZ Prime过滤器-1.0.108.zip

    名称:AMZ Prime过滤器 ---------------------------------------- 版本:1.0.108 作者:http://shopswain.com/ 分类:商业购物 ---------------------------------------- 概述:使用AMZ Prime过滤器隐藏亚马逊浏览...

    远丰网盾网站垃圾信息过滤器 v1.0 免费版.rar

    远丰网盾是国内首款针对网站垃圾信息进行内容扫描过滤的云计算软件  目前我们的系统拥有四个高速智能扫描引擎:  1.数字指纹扫描引擎:收集了海量垃圾信息,经系统按照某种算法提取这些信息的数字指纹。能对用户...

Global site tag (gtag.js) - Google Analytics