-Djava.rmi.server.hostname=localhost を設定すると、127.0.0.1 でのみリッスンする必要があると想定しました
いいえ。
java.rmi.server.hostname が制御するものを誤解していますか?
はい。java.rmi.server.hostname
リモート オブジェクトがリッスンする IP アドレスとは何の関係もありません。それはによって決定されますRMIServerSocketFactory.
別の回答で私の本からの誤った引用を修正するには(その後削除されました):
java.rmi.server.hostname:
ホスト名文字列。デフォルト値は、「ドット四角形」形式のローカル ホストの IP アドレスです。これは、リモート オブジェクトがエクスポートされるときに、この JVM によって作成されるリモート スタブに埋め込まれます。これは、マルチホーム ホストによってエクスポートされた RMI サーバーの有効な IP アドレスを制御するために使用できます。このプロパティは、JVM の存続期間中に一度だけ読み取られます。[1]
さらに拡張するために、NAT デバイスの背後にあるホストによってエクスポートされた RMI サーバーの実効 IP アドレス (クライアントから見たもの) を制御するためにも使用できます。たとえば、NAT の状況では、必ずしもローカル ホストと関係があるわけではなく、ホスト名、ドットで区切られた IPv4 アドレス、または IPv6 アドレスのいずれかになります。
[1] Pitt & McNiff、java.rmi、The Remote Method Invocation Guide、 Addison Wesley 2001、p.258。