【发布时间】:2015-07-01 12:25:02
【问题描述】:
可能是一个有点不寻常的场景,但我们需要在 Spring MVC 控制器中重定向:
/js/hal-browser/browser.html
到:
/js/hal-browser/browser.html#/some_path/
迄今为止,我所有尝试的解决方案都导致了重定向循环,因为 Spring 执行重定向,但随后在重定向 URL 中重复匹配 /browser.html,而不管附加信息如何。我需要说的是'匹配 /browser.html 仅当它是路径的结尾'。
我在PathMatchConfigurer 上尝试过setUseSuffixPatternMatch(Boolean.FALSE); 无济于事,还在请求映射本身中尝试了以下URI 模板正则表达式模式:
"/js/hal-browser/{file:browser\\.html$}"
..但仍然得到一个重定向循环。想法赞赏 - 这是 SpringBoot 1.2.3 微服务中的 Spring 4.1.6,通过上下文。
更新:
在进一步调查和更好地理解 HAL 浏览器使用的 URL 片段以确定它将在微服务本身内向哪个路径发出请求时,我相信解决方案可能不在于尝试重定向 browser.html,因为 Spring无论片段值如何,都会在每个请求上将其映射到相同的控制器方法,而是恢复到 HAL 浏览器已设置为其默认入口点的应用程序的默认上下文路径 (/),或者找到一个配置嵌入式 tomcat 容器以在默认上下文路径上以合理的内容(不仅仅是 404)响应的方法,即使应用程序映射到 /some_path。
作为进一步的上下文,我们可以毫无问题地从/browser(或其他任何路径)的便捷路径重定向到 HAL 浏览器,并将正确的入口点片段作为服务的上下文路径 - 这工作正常。问题是浏览器本身有一个“转到入口点”按钮,当将其作为webjar 拉入时,它被硬编码为/。另一种选择是放弃 webjar,只复制浏览器的静态文件并更新入口点。
【问题讨论】:
-
#是一个特殊字符,永远不会发送到服务器,服务器只会看到之前的部分。 -
你真的需要在服务器上执行这种重定向吗?您不能简单地将
#/some_path/添加到 JavaScript 中的位置吗? -
@axtavt - 不容易,因为 hal-browser 作为 webjar 被拉入(否则它会很简单)
标签: java spring spring-mvc spring-boot microservices