Sla*_*ast 5 java url encode servlets decode
让我们假设我有像'=&?/;#+%'这样的字符串作为我网址的一部分,让我们这样说:
example.com/servletPath/someOtherPath/myString/something.html?a=b&c=d#asdf
Run Code Online (Sandbox Code Playgroud)
其中myString是上面的字符串.我编写了关键部分,因此URL看起来像
example.com/servletPath/someOtherPath/%3D%26%3F%2F%3B%23%2B%25/something.html?a=b&c=d#asdf
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
当我在servlet中并且我读取任何一个request.getRequestURI(),request.getRequestURL()或者request.getPathInfo(),返回的值已经被解码,所以我得到了类似的strilng
someOtherPath/=&?/;#+%/something.html?a=b&c=d#asdf
Run Code Online (Sandbox Code Playgroud)
我无法区分真正的特殊字符和编码字符.
我通过完全禁止上面的字符解决了特殊的问题,这在这种情况下工作,但我仍然想知道有没有办法在servlet类中获取未解码的URL.
另一个编辑:当我昨晚遇到这个问题时,我太累了,无法注意到真正发生的事情,这更奇怪!我有servlet映射,比如说/ servletPath/*之后我可以放任何我想要的东西并让我的servlet响应路径的其余部分,除非路径中有%2F.在那种情况下,请求永远不会访问servlet,我得到404!如果我把'/'代替%2F它可以正常工作.我在Linux上运行Java 1.6.0-04上的Tomcat 6.0.14.
jcs*_*ica 22
浏览器和服务器的'%2F'和'/'之间存在根本区别.
HttpServletRequest规范说(没有任何逻辑,AFAICT):
getPathInfo的结果()应该被解码,但getRequestURI的()的结果不能被解码.如果是这样,你的Servlet容器就违反了规范(正如Wouter Coekaerts和Francois Gravel正确指出的那样).您运行的是哪个Tomcat版本?
更令人困惑的是,出于安全原因,当前的Tomcat版本会拒绝包含某些特殊字符编码的路径.
| 归档时间: |
|
| 查看次数: |
10425 次 |
| 最近记录: |