使用 Thymeleaf 显示当前服务网关 url
Posted
技术标签:
【中文标题】使用 Thymeleaf 显示当前服务网关 url【英文标题】:Display current service gateway url by using Thymeleaf 【发布时间】:2017-11-16 07:43:34 【问题描述】:我无法找到一种解决方案来显示我当前的服务 url(在 eureka 注册并通过 zuul 网关调用),例如:http://localhost:8080/services/someservice
在客户端 html 页面中使用 Thymeleaf。
我尝试过使用#httpServletRequest?.requestURL
,但这会返回服务在 Eureka 中的注册方式,例如:user.somepackage.com:someservice:8011
,这并不是我想要的。
对此我有一个可能的解决方案是在 Thymeleaf 中使用硬编码的 url 分配一个变量,或者通过 Spring 控制器执行此操作,但我认为这不是一个简洁的方法。
也许有人遇到了类似的问题并找到了更好的解决方案。
【问题讨论】:
【参考方案1】:其实解决方法很简单:
<a th:href="@~/services/someservice/logout">
最有趣的部分是 ~ 标志。这定义了实际的服务器 url,例如:http://localhost:8080。正是我需要的。
【讨论】:
【参考方案2】:启用 Reverse 代理后,使用配置的路由映射应该很简单。
考虑以下 ZUUL API 网关的路由映射示例:
zuul:
routes:
someservice:
path: /services/someservice/**
url: http://localhost:8080/services/someservice
您应该能够在客户端 Thymeleaf 模板中访问您的服务的 context-relative URL:
<a th:href="@/services/someservice/">
<!-- OR -->
<form th:action="@/services/someservice">
<!-- ... -->
根据您的需要,您应该使用适当的Thymeleaf URL syntax。下面是 URL 示例:
<!-- Server-relative -->
<a th:href="@~/services/someservice/">
<!-- Context-relative -->
<a th:href="@/services/someservice/">
<!-- ... -->
【讨论】:
感谢您的解决方案,但恐怕它并不能完全解决问题,我有:我的 url 在应用程序中并且附加的 .js 或 .css 文件在我浏览时丢失了围绕我的申请,fe转到services/someservice/findsomething/id.
我必须将整个网址静态插入href
才能使它们工作。如果没有整个 url,使用 th:href
也不起作用。这就是为什么我正在考虑使用一些参数来查找当前的 url,并且如我上面提到的那样返回。
我刚刚提到了上下文相关的 URL 方案。我猜你需要一个服务器敏感的 URL 路径。我会相应地更新答案。以上是关于使用 Thymeleaf 显示当前服务网关 url的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC:如何在 Thymeleaf 中获取当前 url