2017-09-05 13 views
0

UIのコードを春の安らかなapiから分離する予定です.Uiをさまざまなクライアント向けにカスタマイズしたいからです。私たちは残りのapiを持っており、ユーザー名とパスワードを認証します。実際に私のUIパッケージでは、私は春のRestTemplateで認証されたユーザを得るためにこのapiを呼び出すスプリングコントローラを持ち、結果に応じて適切なページを返します。認証APIはリクエストからのIPアドレスを使用し、間違ったユーザ名のパスワードを3回入力すると、そのIPアドレスを24時間ブロックします。しかし、この問題は、私のUIパッケージが配備されているサーバーのIPアドレスを取得し、呼び出し元が自分のUIサーバーであるという正しい動作であることを、このapiと呼ぶたびに発生します。私のUIパッケージで呼び出し元のIPアドレスを取得し、それを私のapiに行う要求に設定する方法はありますか? RestTemplateリクエストで実際の発信者のIPを設定する方法はありますか?あなたはのHttpServletRequestを使用してそれを行うことができます春に発信者のIPアドレスを送信する方法RestTemplate

答えて

1

、あなたのAPIメソッドは、のHttpServletRequest用に定義されたパラメータを持つ必要があります。

あなたのAPIメソッドは、次のようになります。

@RequestMapping(value = "/myApiPath", method = RequestMethod.GET) 
      public void myApiMethod(MyObject myobject, final HttpServletRequest request) throws IOException { 
       String ipAddress=getIpAddressOfRequest(request); // get Ip address 
      } 

し、IPアドレスを取得するためのHttpServletRequestのリクエストを使用し、以下のように:

public static String getIpAddressOfRequest(final HttpServletRequest request) { 
      String remoteAddr = ""; 
      if (request != null) { 
       remoteAddr = request.getHeader("X-FORWARDED-FOR"); 
       if (remoteAddr == null || "".equals(remoteAddr)) { 
        remoteAddr = request.getRemoteAddr(); 
       } 
      } 
      return remoteAddr; 
     } 

とも、あなたは、ドメイン名にあなたの状態を持つことができます以下のコードを使用してサーバー名を取得します。

public static String getProtocolHostnameAndPort(final HttpServletRequest request) { 
      String protocol = request.getProtocol().split("/")[0].toLowerCase(); 
      String hostname = request.getServerName(); 
      int port = request.getServerPort(); 
      StringBuilder result = new StringBuilder(protocol + "://" + hostname); 
      if (port != 80) { 
        result.append(":").append(port); 
      } 
      return result.toString(); 
     } 
+0

迅速な返信をありがとう。実際にはUIとバックエンドの両方が別のサーバー上で動作しているので、ブラウザはUIパッケージでコントローラにリクエストを行い、コントローラはバックエンドパッケージのAPIに再度認証情報を投稿します。あなたの提案では、私はUIコントローラで実際のApiではなく、呼び出し元(ブラウザ)のIPを取得できます。バックエンドのApiでは、私のUIパッケージサーバーのIPを取得しました.3回間違ってログインしようとすると、実際に呼び出したIPをブロックする必要があります。 –

関連する問題