我很难找到一个解决方案来显示我当前的服务网址(在eureka注册并通过zuul网关调用),比如:http://localhost:8080/services/someserviceThymeleaf在客户端html页面中。
我尝试过使用#httpServletRequest?. request estURL
,但它返回了服务在Eureka中的注册方式,例如:user.somepackage.com:soleservice:8011
,这并不是我想要的。
对此,我有一个可能的解决方案是在Thymeleaf中分配一个变量,其中url硬编码,或者通过Spring控制器来完成,但我不认为这是一个整洁的方法。
也许有人遇到了类似的问题,找到了更好的解决方案。
其实解决办法很简单:
<a th:href="@{~/services/someservice/logout}">
最有趣的部分是~符号。它定义了实际的服务器url,比如:http://localhost:8080。正是我需要的。
启用反向代理后,使用配置的路由映射应该很简单。
考虑以下ZUULAPI网关的路由映射示例:
zuul:
routes:
someservice:
path: /services/someservice/**
url: http://localhost:8080/services/someservice
您应该能够在客户端Thymeleaf模板中访问服务的上下文相关URL:
<a th:href="@{/services/someservice/}">
<!-- OR -->
<form th:action="@{/services/someservice}">
<!-- ... -->
根据您的需要,您应该使用适当的ThymeleafURL语法。下面是URL示例:
<!-- Server-relative -->
<a th:href="@{~/services/someservice/}">
<!-- Context-relative -->
<a th:href="@{/services/someservice/}">
<!-- ... -->