ServletRequest获取不到getParameter和filter获取不到request请求中的Parameter

有同事使用我上篇文章中使用的filter,过滤每一个request请求,然后根据请求中的parameter过滤有危险倾向的值,但是很神奇的事情发生了。

系统的调用顺序是:

            提交表单→filter(section1)→controller→filter(section2)→页面渲染相应。

fsection2 中的请求主要是获取页面UIROOT组件,跟本次过程没有关系。碰到的问题表现在,section1 中的filter方法:

        /**
	 * 覆盖getParameter方法,将参数名和参数值都做xss & sql过滤。
	 * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取
	 * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
	 */
	@Override
	public String getParameter(String name) {
		String value = super.getParameter(xssEncode(name));
		if (value != null) {
			value = xssEncode(value);
		}
		return value;
	}

无论如何实验,页面的所有参数根本在getParameter方法中都没有出现过,一个参数都获取不到,参数的值也拿不到。经过痛苦的排查,发现原因是两个系统提交表单方法的不同,然后发现是表单的enctype设置不一样。

我的系统enctype没有任何设置,也就是默认值x-www-form-urlencoded。他的系统设置为:multipart/form-data。



在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。


一、application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。这是标准的编码格式。 
二、multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
三、text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。

form的enctype属性常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。 
        当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。 
        当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 
        如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 
如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值