我目前正在使用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)