提问者:小点点

使用Thymeleaf显示当前服务网关url


我很难找到一个解决方案来显示我当前的服务网址(在eureka注册并通过zuul网关调用),比如:http://localhost:8080/services/someserviceThymeleaf在客户端html页面中。

我尝试过使用#httpServletRequest?. request estURL,但它返回了服务在Eureka中的注册方式,例如:user.somepackage.com:soleservice:8011,这并不是我想要的。

对此,我有一个可能的解决方案是在Thymeleaf中分配一个变量,其中url硬编码,或者通过Spring控制器来完成,但我不认为这是一个整洁的方法。

也许有人遇到了类似的问题,找到了更好的解决方案。


共2个答案

匿名用户

其实解决办法很简单:

<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/}">
<!-- ... -->