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>
分享到:
相关推荐
文本过滤NHtmlFilter v1.0源码 源码描述: 开发环境:vs2008 开源代码NHtmlFilter 过滤Html危险脚本 防止XSS攻击 如何防止XSS攻击,在.net做web开发上真的很弱。 底层框架,基础类库是很不完善。又是做互联网应用,...
敏感词汇sql文件,可用于对平台用户在不平场景下进行的昵称设置等进行过滤
过滤敏感词汇的laravel包,使用DFA算法
———————————————————————————————————————————— | 这些全是人工审核的, | | 禁止发广告、禁止发发动言论, | | 禁止严重色情内容,审核较敏感词汇。 | | 替换...
对非法注入,提交的信息进行详细的记录,方便网站管理员查看非法记录,或删除以前的记录;...加入完善的过滤函数,在线修改过滤函数,自由添加和修改禁止登陆的IP地址; 管理员口令加密;默认密码为 xyxiao
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系...
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系...
名称:AMZ Prime过滤器 ---------------------------------------- 版本:1.0.108 作者:http://shopswain.com/ 分类:商业购物 ---------------------------------------- 概述:使用AMZ Prime过滤器隐藏亚马逊浏览...
SQL注入简单总结——过滤逗号注入
远丰网盾是国内首款针对网站垃圾信息进行内容扫描过滤的云计算软件 目前我们的系统拥有四个高速智能扫描引擎: 1.数字指纹扫描引擎:收集了海量垃圾信息,经系统按照某种算法提取这些信息的数字指纹。能对用户...
僵尸网络意思就是用户在不知情或没有获得用户的授权下,就有自动运行任务的计算机,而攻击者通过远程控制这些计算机发起拒绝服务器(DOS)攻击。因为有可能一大堆计算机被远程控制了,从而发起大范围的攻击,后果...
基于MATLAB的发酵液恒压过滤比阻计算方法——以解淀粉芽孢杆菌Q-426发酵液为例.pdf
利用java实现敏感词过滤的工具类,需要根据具体业务适当调整词库内容.非常实用.
面对海量的信息流,传统信息过滤技术只能通过简单的关键词匹配,错漏百出,准确率极低,发挥的作用只能是杯水车薪。九眼智能过滤系统利用多项自然语言处理专利算法,为信息的智能实时过滤提供了全新的技术解决方案!...
实用网站敏感关键词过滤词库
用eclipse集成开发环境, jsp 过滤器——解决中文乱码问题
javaWeb实现的过滤器敏感字过滤,建一个敏感字符的文件,发送时实现过滤为***
Java 敏感词汇过滤 Java 敏感词汇过滤Java 敏感词汇过滤Java 敏感词汇过滤