Spring Boot 基本

Spring Bootでリクエストを送ったクライアントのIPアドレスを取得してみた

業務用のWEBアプリケーションを作成する際、アクセスログ等にIPアドレスを残しておきたい場合がある。

IPアドレスは、「-Djava.net.preferIPv4Stack=true」というJava起動時のVMオプションを付与しないと、IPv6形式で取得されてしまうので、IPv4形式で取得したい場合はこの指定が必要になる。

IPv4形式とIPv6形式の違いについては、以下のサイトに詳しく書かれている。
https://www.netassist.ne.jp/blog/?p=642

今回はログでなく、Spring BootのWEB画面用アプリで、リクエストを送ったクライアントのIPアドレスを取得し表示するサンプルプログラムと、IntelliJ IDEA上でのJava VMオプションの指定方法も含め共有する。

前提条件

以下の記事のSpring BootのWEB画面用アプリが作成済であること。

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

 

やってみたこと

  1. サンプルプログラム作成とその実行結果確認
  2. Java VMオプションの指定と結果検証

 

サンプルプログラム作成とその実行結果確認

今回は、Java VMオプションを指定する前に作成した、リクエストを送ったクライアントのIPアドレスを取得し画面に表示するプログラムを作成し、それを実行してみた。

今回作成したプログラム構成は以下の通り。
IPアドレスを表示するプログラムの構成

また、「DemoController.java」「index.html」の内容は以下の通り。

 

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-show-ipaddress/demo

その後、Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスした結果は以下の通りで、IPアドレスがIPv6形式で表示される。
IPアドレスを表示するプログラムの実行結果_IPv4設定前

Java VMオプションの指定と結果検証

今回は、Java VMオプションを指定し、プログラムの内容はそのままで、再度実行してみた。Java VMオプションの指定方法は以下の通り。

1) IntelliJ IDEAの「実行」メニューから、「プロファイル」を選択
IPv4_VM設定1

2) 実行プログラム(DemoApplication)を選択後、「編集」を選択
IPv4_VM設定2

3) 下記のように、Javaアプリケーション起動時の設定画面が開くことを確認
IPv4_VM設定3

4) VM Options(VMオプション)に「-Djava.net.preferIPv4Stack=true」を指定し、「適用」ボタンを押下
IPv4_VM設定4

5) 「閉じる」ボタンを押下
IPv4_VM設定5

また、上記JavaVMオプションの変更後、Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスした結果は以下の通りで、IPアドレスがIPv4形式で表示される。
IPアドレスを表示するプログラムの実行結果_IPv4設定後

要点まとめ

  • IPアドレスの取得は、HttpServletRequestクラスのgetRemoteAddrメソッドで行える。
  • IPv4形式でIPアドレスを取得するには、「-Djava.net.preferIPv4Stack=true」というJava起動時のVMオプションを指定する必要がある。