前一阵子,由于struts漏洞,项目组被迫升级了struts2
升级后暴露出挺奇怪的一个问题jsp页面表单里有name="obj.var" value="123"的input域
在提交表单时action="/xxx.do?obj.var=123"
这样,在后台通过getter方法获取到的obj.getVar()的值是"123, 123"
这应该是url拼接的参数和表单提交的参数重复导致的但是这段代码并没有改过,在未升级前(2.0.6)是能正确获取到obj.getVar()的值是"123"的
而升级到之后(2.3.15.1)获取到的就是"123, 123"有高手来帮忙解释一下这个现象么?
先行谢过struts2url表单重复
升级后暴露出挺奇怪的一个问题jsp页面表单里有name="obj.var" value="123"的input域
在提交表单时action="/xxx.do?obj.var=123"
这样,在后台通过getter方法获取到的obj.getVar()的值是"123, 123"
这应该是url拼接的参数和表单提交的参数重复导致的但是这段代码并没有改过,在未升级前(2.0.6)是能正确获取到obj.getVar()的值是"123"的
而升级到之后(2.3.15.1)获取到的就是"123, 123"有高手来帮忙解释一下这个现象么?
先行谢过struts2url表单重复
升级到struts2.3.15.1之后,取到的就是"123, 123"了
升级到struts2.3.15.1之后,取到的就是"123, 123"了
是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。
升级到struts2.3.15.1之后,取到的就是"123, 123"了
是不是你的表单域中有两个‘obj.var’;在struts2的任何版本中,如果表单域中包含两个相同的对象的时候struts会自动封装成item形式。
如果是表单form里面有两个域,则无论是2.0.6还是2.3.15.1都会封装成"123, 123",这个没什么问题现在的情况是表单form里面有一个"obj.var",在拼接请求url的时候又拼了一个"obj.var=123"
这样在2.0.6和2.3.15.1两个版本就出现了截然不同的两种情况:"123"和"123, 123"
这是为啥呢?
<input id="obj.var" name="obj.var" value="123">
js:
fm.action="xxx.do?obj.var=123";
fm.submit();这样obj.var既存在于表单里也存在于url里
在struts2.0.6,后台获取的就是"123"
在struts2.3.15.1,后台获取的就是"123, 123"
<input id="obj.var" name="obj.var" value="123">
js:
fm.action="xxx.do?obj.var=123";
fm.submit();这样obj.var既存在于表单里也存在于url里
在struts2.0.6,后台获取的就是"123"
在struts2.3.15.1,后台获取的就是"123, 123"
确实是的,你这样会存在封装item形式的,二者取其一吧,