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については以下を参考にしてください。
(2) (1)でない場合(プロキシサーバーなどを経由していない場合)
request.getRemoteAddr()だけで取得することができます。