2017-10-30 6 views
2

私はAWSでSDR 2.6.4を実行しており、relsが正しく計算されていない状況があります。X-Forwarded-ProtoとX-Forwarded-Portをオーバーライドするにはどうすればよいでしょうか?

SDRへのコールを転送するアプリケーション・ロード・バランサへのコールをプロキシするAPIゲートウェイがあります。 AGWはTLS接続を終了し、プレーンHTTPおよび非標準ポート経由でALBと通信します。 >http://loadbalancer:9876/foo -

https://apigateway:443/foo

URLは次のようになります。

計算されるrelは、2つのハイブリッドです:http://apigateway:9876/barです。

原因はALBは、AGWがで呼ばれていたもの、それはと呼ばれていた値でX-転送さ-プロトX-転送されたポートではない塗りつぶし、およびUriComponentsBuilder使用していることですrelsを計算するための値。

私の最初に考えたのはHandlerInterceptorを作成し、それらの値を強制することでしたが、すぐにのHttpServletRequestは、HTTPヘッダの変異のために許可していないことを発見しました。

デバッガを見ると、TomcatがHTTPリクエストオブジェクトを手に入れてしまえば、完全に形成され、Springはそれを変更するための何もできません。

フォワードヘッダーを追加/変更する方法については、誰でもAGWではなくALBを指すように考えていますか?あなたは状態として

おかげで、 ロン

答えて

2

は、あなたがそれをラップすることができますしかし、HttpServletRequestのを変更することはできません。

ラッパー::

public class MyRequestWrapper extends HttpServletRequestWrapper{ 

    public MyRequestWrapper(HttpServletRequest request){ 
     super(request); 
    } 

    @Override 
    public String getHeaders(String name){ 
     if(name.equals("X-Forwarded-Proto"){ 
      return "xyz"; 
     } 
     else{ 
      return ((HttpServletRequest)getRequest()).getHeaders(name); 
     } 
    } 
} 

フィルタ:

public class MyFilter implements Filter{ 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 

     chain.doFilter(new MyRequestWrapper((HttpServletRequest)request), response); 
    } 
} 
サーブレットフィルタを介して、その後ではなく、あなたのような何かを行うことができるはず春インターセプター経由

https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequestWrapper.html

関連する問題