Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

JSFでクライアントIPアドレスの取得

ログでアクセス元のクライアントIPアドレスを残す必要が出ました。
JSF、というか、CDI管理Beanで以下のようにして普通に取得できますが、サーバ自身からアクセスすると「0:0:0:0:0:0:0:1」となります。。これはIPv6ループバックアドレスらしい(IPv4でいう127.0.0.1)ですが、なぜここだけIPv6になるんだ…。

private String getRemoteIpAddr(){
    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
    HttpServletRequest request = (HttpServletRequest)externalContext.getRequest();
    return request.getRemoteAddr();
}

別マシンからアクセス(社内LAN)すると、ちゃんと「10.25.255.XXX」のように出ました。一安心。
うーむ、しかしなぜ127.0.0.1にならないんでしょうか。

この作業していて一番驚いたのは、別マシンからアクセスしたとき、たまたまサーバ側のNetBeansでブレイクポイントを置いていたのですが、そこに止まったこと。こんな簡単にリモートデバッグできるのか。
VisualStudioは確かこれができなくて(設定が悪かったのかもしれないけど)困ったことがあったので、かなり嬉しいです。
おそるべしNetBeans

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村