filter过滤器过滤特殊字符

Java中过滤特殊字符的方法大家都知道replace(),但是经过过滤器后传递的参数到达Action后,经request取得后还是原本网页输入的内容,不是我们修改param参数后的值。

//循环读取参数
    while (params.hasMoreElements()){
    	
    	param = (String) params.nextElement(); //获取请求中的参数
        String[] values = servletrequest.getParameterValues(param);//获得每个参数对应的值
    
	    for (int i = 0; i < values.length; i++) {
			System.out.println("values[i] = "+values[i]);
			paramValue = values[i];       
			//转换目标字符变成对象字符,可以多个。后期扩展特殊字符库用于管理
			paramValue = paramValue.replaceAll("'",""); 
			paramValue = paramValue.replaceAll("@","");
			paramValue = paramValue.replaceAll("孙悟空","***");
			
			//这里还可以增加,如领导人 自动转义成****,可以从数据库中读取非法关键字。
			values[i] = paramValue;
	     }
	    	//把转义后的参数重新放回request中
	    request.setAttribute(param, paramValue);
    }
   	
	//假设我页面输入:孙悟空
	/****Action 中调试代码******/
	String Parameterusername=request.getParameter("username");
	String Attributeusername=(String) request.getAttribute("username");
		
	System.out.println("Parameterusername"+Parameterusername);//输出孙悟空,不是我们想要的。
	System.out.println("Attributeusername"+Attributeusername);//输出****,这才是我们想要的结果。

所以我们必须改变param的值才对,更简明的说就是Java如果提供了setparamvalue的方法就好了,

后来API中提供了HttpServletRequestWrapper类,我们可以覆盖父类的方法MyRequestWrapper.java,

然后最后过滤chain.doFilter(new MyRequestWrapper((HttpServletRequest) request), response);

再测试就可以看到Parameterusername和Attributeusername都会输出****

filterdemo 有需要的可以下载


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值