Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

thrift/remoteIP

リモートIPアドレスの取得

サーバ側に接続してきたクライアントのIPアドレスを取得する方法。 サーバ側の構成によって、異なる方法があるとおもわれる。 thrift-0.8.0の場合。

TThreadPoolServerを改造する方法

ここではTThreadPoolServerを使用するものとし、それを改造する。

  • TThreadPoolServerのソースをまるまるコピーし、名前をMyThreadPoolServerとでもする。

  • (どこでも良いのだが)MyThreadPoolServerのstaticフィールドとして以下を定義。

public static ThreadLocal<String> remoteIpAddress = new ThreadLocal<String>();
  • 内部クラスWorkerProcessのrun()メソッドの冒頭に以下を追加。

      try {
        Field field = TSocket.class.getDeclaredField("socket_");
        field.setAccessible(true);
        Socket socket = (Socket)field.get(client_);
        String ip = socket.getInetAddress().getHostAddress();
        remoteIpAddress.set(ip);        
      } catch (Exception ex) {
        ex.printStackTrace();
      }
  • ハンドラの中では以下のようにipアドレスを取得。

  String remoteIp = MyThreadPoolServer.remoteIpAddress.get();

※もちろん、thriftのソースコードを修正してしまった方が簡単だが、ここではあえてそうしないようにした。