5

イントラネット上の Windows Server 2008 でアプリケーションを実行しています。

ログインするために、アプリケーションは要求からホスト名を取得してユーザーを検証しようとします。ただし、アプリケーションが名前の代わりに IP アドレスを返す場合があり、しばらくすると、アプリケーションは何もせずに名前を解決でき、すべて正常に動作します...

これは、ホスト名を取得するために使用しているコードです。

InetAddress inaHost = InetAddress.getByName(request.getRemoteAddr());
String hostname = inaHost.getHostName();
System.out.println("[[ Hostname = " + hostname + " ]]");

これはイントラネットの設定 (DNS!?) が原因なのか、それとも私のコードや魔術などに問題があるのでしょうか?

4

3 に答える 3

6

初挑戦

System.out.println("Host = " + request.getServerName());
System.out.println("Port = " + request.getServerPort());

動作しない場合

hostName == null;
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
{
  while (interfaces.hasMoreElements()) {
    NetworkInterface nic = interfaces.nextElement();
    Enumeration<InetAddress> addresses = nic.getInetAddresses();
    while (hostName == null && addresses.hasMoreElements()) {
      InetAddress address = addresses.nextElement();
      if (!address.isLoopbackAddress()) {
        hostName = address.getHostName();
      }
    }
  }
}
于 2013-11-08T15:35:39.823 に答える