2017-06-14 40 views
1

我無法找到解決方案來顯示我當前的服務URL(使用尤里卡註冊並通過zuul網關進行了調用),如:在客戶端html頁面中使用Thymeleaf的http://localhost:8080/services/someservice使用Thymeleaf顯示當前服務網關的網址

我試過使用#httpServletRequest?.requestURL,但它返回的服務是如何在Eureka上註冊的,如:user.somepackage.com:someservice:8011,這不正是我想要的。

我對此有一個可能的解決方案是在硬編碼的URL中爲Thymeleaf分配一個變量,或者通過Spring控制器進行分配,但我認爲這不是一個整潔。

也許有人有類似的問題,並找到了更好的解決方案。

回答

1

啓用代理後反向,應該使用配置的路由映射直接進行。

考慮爲ZUUL API網關以下路由映射例如:

zuul: 
    routes: 
    someservice: 
     path: /services/someservice/** 
     url: http://localhost:8080/services/someservice 

你應該能夠給客戶Thymeleaf模板內訪問上下文相對網址爲您服務:

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

感謝您的解決方案,但恐怕它不能很好地解決問題,我有:我的網址在應用程序中,附加的.js或.css文件丟失,當我瀏覽我的應用程序時,f.e.去'services/someservice/findsomething/id.'我必須靜態插入整個url到'href'中才能工作。如果沒有整個網址,使用'th:href'也不起作用。這就是爲什麼我正在考慮使用一些參數來查找當前的url,並且如上所述返回。 –

+0

我剛纔提到了上下文相關的URL方案。我想你會需要一個服務器敏感的URL路徑。我會相應地更新答案。 – tmarwen

1

其實,解決方法是相當簡單:

<a th:href="@{~/services/someservice/logout}"> 

最有趣的部分是跡象。這定義了實際的服務器url,如:http://localhost:8080。正是我需要的。