为什么此URL从Tomcat返回错误400?

时间:2016-03-25 13:19:38

标签: java tomcat url servlets

我有一个运行Java servlet的Tomcat服务器。我试图制作一个返回存储文件的servlet,给定它们的加密ID。

ID:100

加密ID:+ e4 / E5cR / aM =

网址编码ID:%2Be4%2FE5cR%2FaM%3D

生成的网址:http://localhost/file/demo/%2Be4%2FE5cR%2FaM%3D

当我尝试关注该链接时,我甚至无法访问我的servlet代码 - 服务器返回此错误:无法加载资源:服务器响应状态为400 (错误请求)

这个网址有什么问题让Tomcat在到达我的代码之前拒绝了它?我通过网址编码器运行它,但我没有看到任何无效字符。

2 个答案:

答案 0 :(得分:7)

您在网址中删除了“/”编码。由于潜在的攻击,Apache不允许它们。有设置允许他们:

System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

查看类似的post

答案 1 :(得分:0)

您可能遇到以下两个问题之一:

1)您没有在URL中包含该端口。您已将Tomcat端口配置为端口80,在这种情况下不需要端口,或者您需要包含端口,默认为8080,例如:

http://localhost:8080/file/demo/%2Be4%2FE5cR%2FaM%3D

2)您正在添加加密ID作为URL本身的一部分,这必须映射到URL映射中的某种Servlet / JSP / View,并且不太可能。 Tomcat不会识别唯一的ID,并且知道要调用的相应处理程序来处理映射。假设您打算调用映射到'/ file / demo'的servlet / JSP /控制器,您更可能希望将ID作为请求参数传递,例如:

http://localhost:8080/file/demo?id=%2Be4%2FE5cR%2FaM%3D