2017-06-14 21 views
1

クライアントのHTMLページにThymeleafというhttp://localhost:8080/services/someserviceのように現在のサービスURL(ユーレカに登録され、zuulゲートウェイ経由で呼び出された)を表示するソリューションを見つけることができません。Thymeleafを使用して現在のサービスゲートウェイのURLを表示

私は#httpServletRequest?.requestURLを使用しようとしましたが、サービスがユーレカにどのように登録されているかを返信します。user.somepackage.com:someservice:8011、これは私が欲しいものではありません。

私がこれに対して持っている解決策の1つは、ハードウェアでハードウェア化された変数をThymeleafで1回割り当てるか、またはSpringコントローラで行うことですが、これはきちんとしたものではないと思います。

誰かが同様の問題を抱えていて、より良い解決策を見つけた可能性があります。

答えて

1

Reverseプロキシが有効になっていると、これは設定済みのルートマッピングを使用して簡単に行う必要があります。

ZUUL API Gatewayの次のルートマッピング例を考えてみましょう:

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

必要に応じて、適切なThymeleaf URL syntaxを使用してください。ここではURLのサンプルダウン:

<!-- Server-relative --> 
<a th:href="@{~/services/someservice/}"> 

<!-- Context-relative --> 
<a th:href="@{/services/someservice/}"> 
<!-- ... --> 
+0

あなたのソリューションに感謝しますが、私はそれが問題を解決していないことに気付いています。私のアプリケーション内のURLと添付された.jsまたは.cssファイルは、アプリケーションの周りをブラウズすると失われます。 'services/someservice/findsomething/id.'に行きます。私は静的にURLを' href'に挿入しなければなりません。 'th:href'を使うと、URL全体がなければ動作しません。そのため、私は現在のURLを見つけるためにいくつかのパラメータを使用することを考えていたので、上記のように返されます。 –

+0

私はちょうどコンテキスト相対URLスキームを記述しました。私はあなたがサーバーに敏感なURLパスが必要になると思います。私はそれに応じて答えを更新します。 – tmarwen

1

実際には、解決策は非常に簡単だった:

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

最も興味深い部分はサインです。これは、実際のサーバーのURLを定義します(http://localhost:8080など)。ちょうど私が必要なもの。

関連する問題