ServletRequest获取不到getParameter和filter获取不到request请求中的Parameter
2016-02-04 16:41
603 查看
有同事使用我上篇文章中使用的filter,过滤每一个request请求,然后根据请求中的parameter过滤有危险倾向的值,但是很神奇的事情发生了。
系统的调用顺序是:
提交表单→filter(section1)→controller→filter(section2)→页面渲染相应。
fsection2 中的请求主要是获取页面UIROOT组件,跟本次过程没有关系。碰到的问题表现在,section1 中的filter方法:
无论如何实验,页面的所有参数根本在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)。
系统的调用顺序是:
提交表单→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)。
相关文章推荐
- 【POJ2478】Farey Seque
- GitHub——Pull Request
- IOS 颜色值#ffffff转UIColor
- Android 动画 ValueAnimator(四)
- 将数据库查询到的ueditor内容现在另外一个ueditor中
- CustomSliderView
- iOS-圆形图像显示(UIImageView)
- UINavigationController和UIScrollView一起使用时导致UIScrollView位置偏移
- Android 动画 ValueAnimator(三)
- AbstractQueuedSynchronizer
- UIButton的resizableImageWithCapInsets使用解析--拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片
- 基于IBM Bluemix的数据缓存应用实例
- iOS三种让UILabel中的text居上的方式
- 自定义WheelView UI 实现Ios滚轮效果
- fragment 用法小结
- iOS开发小记:运用Runtime机制扩大UIButton的响应区域
- iOS7中UIView的animateKeyframesWithDuration方法讲解
- 不自定义也可更改UITableViewCellSection背景颜色字体颜色
- 用UITextView加载rtfd文件
- 【Android】3.7 UI控制功能