Java(Spring)でクライアントのIPアドレスを取得する方法

javaでクライアントのIPアドレスを取得する方法を紹介します。

クライアントで、サーバーの方ではないので注意してください。

サーバーにリクエストを送ったユーザーのIPアドレスを取得する方法です。

プロキシサーバーやELBを用いてる場合は、そうでない場合と違うので注意が必要です。


コード

    //IPアドレス取得
    private String getRemoteAddr(HttpServletRequest request) {
        String xForwardedFor =  request.getHeader("X-Forwarded-For");   //(1)
        //ELB等を経由していたらxForwardedForを返す
        if (xForwardedFor != null) {
            return xForwardedFor;
        }
        return request.getRemoteAddr();      //(2)
    }


HttpServletRequestを用います。

(1) ユーザーがプロキシサーバーを介してWebサーバーにアクセスしている場合や、アプリケーションがELB等のロードバランサーの背後にある場合

この場合は X-Forwarded-For httpヘッダーにアクセスして、ユーザーのIPアドレスを取得する必要があります。
request.getHeader("X-Forwarded-For")で取得することができます。
X-Forwarded-Forについては以下を参考にしてください。

ja.wikipedia.org


(2) (1)でない場合(プロキシサーバーなどを経由していない場合)

request.getRemoteAddr()だけで取得することができます。