sevlet的过滤器中为什么要判断jsp中getparameterr

java关键字敏感字实现过滤替换 - 一颗学习的心一直在勃起 - ITeye博客
很多网站都需要对于某些关键字或者某些敏感词汇进行过滤替换的功能。比如在输入框中输入些
脚本,或者输入些政府类型的词汇等都是不允许的,但是你不能限制用户的自由。所以对于网站的过滤功能就显得很有必要了。对于一般的网站使用来说,不需要非常复杂的过滤算法等比较高端的实现。简单的用
HttpServletRequestWrapper
就可以实现。
HttpServletRequestWrapper
的实现采用了包装模式,具体介绍请另找资料。直接切入正题。实现思路:首先定义一个
properties文件,在文件中存放需要替换的文字和替换后的文字,比如替换
(这样就可以避免文本输入的
脚本)。然后定义一个类来继承
HttpServletRequestWrapper
request对象的作用,最后用一个
使用包装后的
对象(即已经经过了过滤作用)。
keyword.properties文件:
然后写一个操作properties文件的工具类,PropertiesUtil.java
package com.lhwl.elt.
import java.io.F
import java.io.FileInputS
import java.io.InputS
import java.util.E
import java.util.HashM
import java.util.I
import java.util.M
import java.util.P
import java.util.S
public class PropertiesUtil{
public static Map readProperties(String src) {
Properties props = new Properties();
Map map = new HashMap();
File file=new File(src);
InputStream in=new FileInputStream(file);
props.load(in);
Enumeration en = props.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String value = props.getProperty(key);
map.put(key, value);//把properties文件中的key-value存放到一个map中
} catch (Exception e) {
e.printStackTrace();
public static String replaceCheck(Map map,String name) {
Set&String& keys = map.keySet();
Iterator&String& iter = keys.iterator();
while (iter.hasNext()) {
String key = iter.next();
String value = (String) map.get(key);
if (name.contains(key)) {
name=name.replace(key, value);//对于符合map中的key值实现替换功能
这里我把从properties文件中读取的key--value的形式都存放到一个map对象中,方法都用static关键字,方便调用。
然后写了个KeyWordRequestWrapper来继承HttpServletRequestWrapper,实现包装request对象的作用。
package com.lhwl.elt.
import java.util.I
import java.util.M
import java.util.S
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletRequestW
public final class KeyWordRequestWrapper extends HttpServletRequestWrapper{
public Map keyM
public KeyWordRequestWrapper(HttpServletRequest servletRequest,Map keyMap){
super(servletRequest);
this.keyMap = keyM
public Map getParameterMap() {
super.getContextPath();
Map&String,String[]& map = super.getParameterMap();
if(!map.isEmpty()){
Set&String& keySet = map.keySet();
Iterator&String& keyIt = keySet.iterator();
while(keyIt.hasNext()){
String key = keyIt.next();
String value = map.get(key)[0];
map.get(key)[0] = this.replaceParam(value);
//这边实现对整个数组的判断。
String[] values=map.get(key);
for(int i=0;i&values.i++){
map.get(key)[i]=this.replaceParam(values[i]);
/* @Override
public String[] getParameterValues(String name) {
// TODO Auto-generated method stub
String[] resources = super.getParameterValues(name);
if (resources == null)
int count = resources.
String[] results = new String[count];
for (int i = 0; i & i++) {
results[i] = this.replaceParam(resources[i]);
public String replaceParam(String name){
return PropertiesUtil.replaceCheck(keyMap,name);
这里由于本人项目的框架原因,框架的request都是使用的getParameterMap来获取的,经过处理了,所以没有使用getParameterValues,可以看到代码中注释掉的方法。覆写了ServletRequestWrapper中的getParameterMap方法来实现包装功能,一般情况下,提交的value数组都只有一个,String value = map.get(key)[0];map.get(key)[0] = this.replaceParam(value);即可满足要求,但为了不出情况,还是实现了对整个数组的过滤替换功能。&/div&
还剩个filter来实现了,先看具体的filter代码:
package com.lhwl.elt.
import java.io.IOE
import java.util.HashM
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.http.HttpServletR
public class KeyWordFilter implements Filter{
private FilterConfig filterC
public static HashMap keyMap =
public static S
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterC
String keyWordPath = filterConfig.getInitParameter("key");
path = filterConfig.getServletContext().getRealPath(keyWordPath);
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)
if(keyMap == null){
keyMap = (HashMap)PropertiesUtil.readProperties(path);
if(req.getMethod().equals("POST")){
chain.doFilter(new KeyWordRequestWrapper(req,keyMap), response);
chain.doFilter(request, response);
public void destroy() {
this.filterConfig =
这里在filter初始化的时候,就获得项目的真实路径,然后把最先定义的keyword.properties文件放到WEB-INF目录下,定义一个keyWordPath,然后就可以通过在web.xml文件中配置init-param来注入。这里把keyMap和path都定义为static,这样只需要在加载的时候一次初始化就好了。chain.doFilter(new KeyWordRequestWrapper(req,keyMap), response);对于需要过滤的内容进行处理关键字,敏感字等,其他的则正常chain.doFilter(request, response); 最后再web.xml中配置这个filter就可以,注意配置的顺序不要和其他filter冲突就行。web.xml配置:&/div&
&!-- 配置过滤关键字 --&
&filter-name&keyWordFilter&/filter-name&
&filter-class&com.lhwl.elt.filter.KeyWordFilter&/filter-class&
&init-param&
&param-name&key&/param-name&
&param-value&/WEB-INF/keyword.properties&/param-value&
&/init-param&
&filter-mapping&
&filter-name&keyWordFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
OK,现在只要输入些properties文件中定义好要替换的内容,则自动的实现了替换功能。比如输入fuck,提交显示出来的就变成了**,对输入的一些js脚本也能够当成文本显示出来了。。。
浏览 13231
浏览: 54789 次
来自: 温州
你好,我想学习电子支付知识,可以推荐一下学习资料吗?
这个过滤器也不过滤关键字啊。
if(req.getMethod().equals(&quot ...
人间大猫 写道请教一下建行的netpay.jar在哪里下载?有 ...
请教一下建行的netpay.jar在哪里下载?有没有转账接口? ...关于myeclipse中webproject中文;国人在使用myeclipse得到便利的同时也要面;先举个例子吧;a)方法一:;在利用getParameter()方法之前添加如;相对来说用起来比较方便,而且对提交方式没有限制;如果是get方式提交有中文,楼主还可以去tomc;redirectPort=\;中加上URIEncoding=\即可;缺点:无法解决用
关于myeclipse中web project中文乱码的解决(过滤器Filter)
国人在使用myeclipse得到便利的同时也要面临myeclipse给我们带来的这样一个问题――中文乱码问题。 先举个例子吧。在使用HttpServletRequest.getParameter(String name)时我们可能会取得中文的乱码。问题描述:当利用getParameter()方法去取HTML元素中value值时,当元素的value值为中文时,用该方法取到的值可能为乱码,这时候我们需要的取得它的中文。 a) 方法一: 在利用getParameter()方法之前添加如下语句: request.setCharacterEncoding(\相对来说用起来比较方便,而且对提交方式没有限制。 b) 方法二: 如果是get方式提交有中文,楼主还可以去tomcat 的server.xml配置文件里在 <Connector port=\ connectionTimeout=\
redirectPort=\中加上URIEncoding=\即可。 缺点:无法解决用post方式提交时的中午乱码。 c) 方法三: String kind = new String(request.getParameter(\但是这个方法只能针对一行一行代码修改,要是你要多次利用getParameter()方法取值时要多次输入此行代码,比较麻烦。 d) 过滤器(Filter): 在使用过滤器解决乱码问题是,form表单的提交方式一定要设为POST,默认的是GET。 在web.xml里面加过滤器,遇上全部的jsp、servlet、do等所有乱码问题都得消失哈。 (1)、先在项目的src中servlt包添加一个过滤器,代码如下:
importjava.io.IOE importjavax.servlet.*; importjavax.servlet.http.HttpServletR importjavax.servlet.http.HttpServletR
publicfinalclassCharacterEncodingFilterimplements Filter {
publicvoidinit(FilterConfigconfig) {
if (config.getInitParameter(\) != null)
encoding = config.getInitParameter(\); ignore = (new Boolean(config.getInitParameter(\)))
publicvoid destroy() { }
publicvoiddoFilter(ServletRequest request, ServletResponse
} HttpServletRequestreq = (HttpServletRequest) HttpServletResponse res = (HttpServletResponse) if (!ignore) {
} chain.doFilter(request, response); req.setCharacterEncoding(encoding); res.setCharacterEncoding(encoding);
FilterChain chain) throwsIOException, ServletException response,
.booleanValue(); if (config.getInitParameter(\) != null)
publicCharacterEncodingFilter() {
} encoding = \; ignore =
(2)、在web.xml里面添加过滤器filter:
Set Character Encoding /*
Set Character Encoding *.jsp
Set Character Encoding *.do
Set Character Encoding servlet.CharacterEncodingFilter
encoding UTF-8
这样,所有的request.getparameter都会经过这个过滤器处理,乱码问题就没有了,而且可以任意修改UTF-8,不过本人还是较为推荐UTF-8。
三亿文库包含各类专业文献、各类资格考试、幼儿教育、小学教育、外语学习资料、文学作品欣赏、关于myeclipse中web_project中文乱码的解决(过滤器Filter)38等内容。 
 filter过滤器解决中文乱码和客户端IP访问控制_IT/计算机_专业资料。本文以实际可以...关于myeclipse中web_pro... 3页 1下载券喜欢此文档的还喜欢 Filter-四个有用...  图 8.11 使用 filter 模板 第三步:创建 web.xml 中生成过滤器相应的模板。单击 window?preference 菜单项,在 打开的窗口中, 依次展开 MyEclipse、 XML、 XML ...  它可以 对 web 应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作。 常见应用场景: URL 级别的权限控制;过滤敏感词汇;中文乱码问题等等。 2、Filter ...  页面乱码问题 在 myeclipse 中 jsp 的默认编码为 ...可使用过滤器: 先变写一个过滤器 package com.oum....filterConfig = } } 在 web.xml 中配置...  MyEclipse 8.5 资源包管理器默认的过滤器_计算机硬件及网络_IT/计算机_专业资料。...MyEclipse 8.5 资源包管理器默认的过滤器 英文版的配置: 中文版的配置: ...  javaweb――Filter(过滤器)学习 一、Filter 简介 Filter 也称之为过滤器, 它是 Servlet 技术中最激动人心的技术, WEB 开发人员通过 Filter 技术,对 web 服务器...  void init(FilterConfig):过滤器的初始化方法,Servlet 容器在创建过滤器实例时调用这 个方法,在这个方法中可以读出在 web.xml 文件中为该过滤器配置的初始化参数。...  (request,respons e); } } 第二部分: javax.servlet.Filter 详细介绍: 过滤器(Filter)位于客户端和 web 应用程序之间, 用于检查和修改两者之间流过 的请求和...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第4章Servlet、过滤器与侦听器.ppt 202页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
&#xe600;下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:100 &&
第4章Servlet、过滤器与侦听器.ppt
你可能关注的文档:
··········
··········
Servlet、过滤器与侦听器
本章主要内容 Servlet 2.4
API的基本构成 Servlet生命周期及编程方法
Servlet程序实现session跟踪的方法
过滤器和侦听器
Servlet包的构成与Servlet生命周期
Servlet是Java服务器端的小程序,是Java环境下实现动态网页的基本技术。 Servlet程序能够调用JavaBean、JDBC、其它Servlet、RMI、EJB、SOAP和JNI等程序完成指定的功能,计算结果以HTML/XML等形式返回给客户端。 在应用中,Servlet起到中间层的作用,将客户端和后台的资源隔离开来。Servlet的API类主要放在javax.servlet和javax.servlet.http这两个包中。
Servlet包的构成与Servlet生命周期 一、GenericServlet抽象类
GenericServlet抽象类定义了一个与协议无关的通用Servlet程序,其中最关键的方法有:
1、service()
Public abstract void service(ServletRequest request, ServletResponse response)throws ServletException, java.io.IOException 形参中的request和response对象是ServletRequest和ServletResponse类型的,强制类型转换为HttpServletRequest和HttpServletResponse类型后,对象的作用和用法同JSP隐含对象中的request和response
Servlet包的构成与Servlet生命周期 2、public ServletConfig getServletConfig()
返回一个ServletConfig对象。
3、public ServletContext getServletContext() 返回当前ServletContext对象。
4、public void init(ServletConfig config)
throws ServletException
Servlet程序的初始化方法。Servlet容器在加载一个Servlet类时,会自动调用此方法完成初始化操作。
Servlet包的构成与Servlet生命周期 5、public void destroy()
Servlet容器在销毁一个Servlet对象前,会自动调用此方法,这个方法的执行表示Servlet程序被停止了服务。 6、public java.util.Enumeration
getInitParameterNames()
返回web.xml中给Servlet程序配置的初始化变量名。
7、public java.lang.String
getInitParameter(java.lang.String name)
返回web.xml中定义的初始化参数值,形参是参数名。如果找不到指定的参数,则返回null。
Servlet包的构成与Servlet生命周期 二、HttpServlet抽象类
1、service()
HttpServlet中处理客户端请求的业务逻辑代码是在doXXX()方法中实现,不是在service()方法内实现
HttpServlet类对service()方法作了重置,它实现的业务逻辑功能是:根据客户端HTTP请求的类型决定应该调用哪个doXXX()方法来处理客户端的请求
Servlet包的构成与Servlet生命周期 2、protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException
当客户端以GET方式提交请求时,该方法被自动调用来处理客户端的请求。形参request和response的含义同JSP隐含对象中的request和response。
Servlet包的构成与Servlet生命周期 3、 protected void doPost(HttpServletRequestrequest, HttpServletResponse response)
throws ServletException, java.io.IOException
当客户端以POST方式提交请求时,该方法被自动调用来处理客户端的请求。
正在加载中,请稍后...温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(18456)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Servlet过滤器',
blogAbstract:'一、什么是Servlet过滤器\r\n过滤器是在数据交互之间过滤数据的中间组件,独立于任何平台或者 Servlet 容器。\r\nServlet过滤器可以应用在客户机和 servlet 之间、servlet 和 servlet 或 JSP 页面之间,以及所包括的每个 JSP 页面之间。二、实现一个 Servlet 过滤器\r\n&\r\n&Servlet过滤器 API 包含javax.servlet包中的 3 个接口,分别是 Filter 、 FilterChain 和 FilterConfig 。&实现一个 Servlet 过滤器的确要经历三个步骤。\r\n& 1、编写 Servlet 过滤器实现类。& 2、配置 Servlet 过滤器。把该过滤器添加到 Web 应用程序中(通过在 Web 部署描述符 /web.xml 中声明它);',
blogTag:'',
blogUrl:'blog/static/7',
isPublished:1,
istop:false,
modifyTime:8,
publishTime:7,
permalink:'blog/static/7',
commentCount:5,
mainCommentCount:5,
recommendCount:5,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(c143bf-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 过滤器判断是否登录 的文章

 

随机推荐