2016-09-30 10 views
0

私はJHipsterを使用していくつかのサービスをビルドしたmicroservceアーキテクチャを持っています。ZuulリバースプロキシはURLを保持します

私は1つのサービスの中で、フィルタを実装しました。

public class TestZuulFilter extends ZuulFilter { 

    @Override 
    public String filterType() { 
     return "route"; 
    } 

    @Override 
    public int filterOrder() { 
    return 5; 
    } 

    @Override 
    public boolean shouldFilter() { 
     String requestUri = RequestContext.getCurrentContext().getRequest().getRequestURI(); 
     return "/serviceid/reverseproxy".equals(requestUri); 
    } 

    @Override 
    public Object run() { 

     // get url from id 
     String id = ctx.getRequest().getParameter("id"); 
     Strign url = URLService.getURLFromId(id); 

     try 
     { 
      RequestContext ctx = RequestContext.getCurrentContext(); 

      // redirect 
      ctx.setRouteHost(new URL(url)); 

     } catch(MalformedURLException ex) {} 

     return null; 
    } 
} 

クライアントは私のサービスhttp://myservice/serviceid/reverseproxy?id=2 zuulリダイレクト(HTTP 302のステータス)この場合、google.comのid 2でURLにユーザーを呼び出します。

どうすればクライアントからの元のリクエストURLを保持できますか?

URLは事前にhttp://myservice/serviceid/reverseproxy?url=2代わり

http://www.google.comのおかげでなければなりません。

答えて

1

リダイレクトとプロキシミングの概念が誤解されているようです。

HTTPリダイレクトは、すべての作業が2つの要求呼び出し(1つはプロキシに、もう1つは外部サービスへ)によって終了するため、URLの変更を意味します。

ここでは、元のリクエストを外部サービス(例:google)にプロキシすると、フィルタが外部サービスのクライアントである必要があります。このようにして、元のクライアントは要求時にのみ呼び出しを行い、外部サービスと通信しているかどうかはわかりません。

+0

ありがとうございます。 zuulでproxyficationを実行することは可能ですか?または、私はnginxのような別のツールを使用する必要がありますか? – DropTheCode

+0

Zuulはプロキシですので、可能です.ngninxとの違いは、Zuulではjavaで独自のビジネスロジックを構築できるということです。だからあなたの配属規則が単純ならば、ngninxは仕事をします。 –

+0

私を要約しましょう。私はルートフィルタを作成する必要があります、実行メソッドの中で、 "外部" URLの内容を取得するHttpClientを作成しますか?あなたは私に例を教えてもらえますか? – DropTheCode

関連する問題