哪些字符使网址无效?
这些有效的网址是?
example.com/file[/].htmlhttp://example.com/file[/].html我们有一个问题,其中嵌入式Tomcat正在IllegalArgumentException从抛出LegacyCookieProcessor。它抛出500 HTTP响应代码。
我们需要处理异常并对其进行处理(特别是将其发送为400)。
典型的@ExceptionHandler(IllegalArgumentException.class)似乎没有被触发,Google似乎只给出了处理Spring Boot特定异常的结果。
这是重现该行为的示例。您可以通过下载包含2.1.5.RELEASE版本中的spring-web(https://start.spring.io/)的初始项目来执行示例。然后将以下两个类添加到您的项目。
DemoControllerAdvice.java
package com.example.demo;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class DemoControllerAdvice {
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
public Map<String, String> forbiddenHandler() {
Map<String, String> map = new HashMap<>();
map.put("error", "An error occurred.");
map.put("status", HttpStatus.FORBIDDEN.value() + " " + HttpStatus.FORBIDDEN.name());
return map;
}
}
Run Code Online (Sandbox Code Playgroud)
DemoRestController.java
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoRestController {
@GetMapping(value = "/working") …Run Code Online (Sandbox Code Playgroud) java.lang.IllegalArgumentException:
Invalid character found in the request target.
The valid characters are defined in RFC 7230 and RFC 3986
Run Code Online (Sandbox Code Playgroud)
该异常是在Get URLs 中传入中文引起的。如何在 tomcat 中解决此问题?
我们不想降低Tomcat版本并要求我们的客户对参数进行编码。
有没有办法通过更改 tomcat 中的配置来解决这个问题?
我目前正在使用Microsoft提供的JavaScript界面开发MS Word Office Addin.我使用Django后端进行了测试实现,其中一切正常.
但是对于最终产品,我必须将功能集成到以多种配置运行的现有Java后端,这些配置是我无法控制的.由用户界面的Vaadin组成,主要是Tomcat(但并不总是)作为Servlet容器.
我遇到了一个问题,即在Word中运行的IFrame会将不需要的和格式错误的_host_info附加到请求URL,其中包含un-urlencoded管道符.例如:Tomcat Log:
"GET /myapp/?_host_Info=Word|Win32|16.01|en-US HTTP/1.1" 200 2101
Run Code Online (Sandbox Code Playgroud)
此格式错误的URL会产生以下异常:
java.lang.RuntimeException: Invalid location URI received from client.
... full stack trace at bottom of the post...
Caused by: java.net.URISyntaxException: Illegal character in query at index 45: https://localhost:8443/myapp/?_host_Info=Word|Win32|16.01|en-US
Run Code Online (Sandbox Code Playgroud)
据我所知,我无法控制是否将此参数附加到URL,因为在Addin的Manifest文件中我只指定了如下所示的源URL,并且信息会自动添加.
<SourceLocation DefaultValue="https://localhost:8443/myapp/ " />
Run Code Online (Sandbox Code Playgroud)
检查文档我没有在那里找到这种行为,所以我可能会遗漏一些东西.此博客文章中提到了查询主机信息,但它似乎不应该是URL的一部分.
有没有办法可以阻止Office加载项附加: ?_ host_Info = Word | Win32 | 16.01 | en-US HTTP/1.1到请求?
如果没有,是否有正确的方法来使用Tomcat过滤/忽略该部分URL?由于整个应用程序已经使用我的Apache Webserver和Django Backend正确运行,其中也收到了URL,但它有效.
至于问题二,我已经尝试实现一个应该删除相关参数的Servlet过滤器.但由于它依赖于相同的Java库来解析URL以查看它,因此抛出了相同的异常.
> May 23, 2016 11:04:51 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [MyUIServlet] …Run Code Online (Sandbox Code Playgroud) tomcat ×3
java ×2
ms-office ×1
office-js ×1
rfc3986 ×1
spring ×1
spring-boot ×1
url ×1
validation ×1