Javaの現在のマシン名とログインしているユーザー?


153

現在ログインしているユーザーの名前(Windows / Unix)とマシンのホスト名を取得することは可能ですか?

私はそれがいくつかの静的環境クラスのプロパティだと思います。

ユーザー名にこれが見つかりました

com.sun.security.auth.module.NTSystem NTSystem = new
        com.sun.security.auth.module.NTSystem();
System.out.println(NTSystem.getName());

そして、これはマシン名です:

import java.net.InetAddress;
...
String computerName;
...
try {
    computerName = InetAddress.getLocalHost().getHostName();
}

catch(Exception ex) {
    ...
}

最初のものはWindows専用ですか?

また、ホスト名が設定されていない場合、2つ目の方法は何をしますか?


NTSystemクラスはのみに存在するWindowsJDKディストリビューション
BullyWiiPlaza

回答:


256

現在ログインしているユーザーを取得するには:

System.getProperty("user.name"); //platform independent 

マシンのホスト名:

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
System.out.println("Hostname of local machine: " + localMachine.getHostName());

1
System.getProperty("user.name"); 、WindowsとLinuxの両方で仕事を?
ナマズ14

5
ただし、このuser.nameはスプーフィングされる可能性があるため、認証には使用しないでください。
Raedwald、2015年

14
System.getProperty( "user.name")は現在ログインしているユーザーではありません。JVMを実行しているセキュリティコンテキストのユーザーです。
rkosegi

1
OPが「マシン名」または「コンピュータ名」と呼ぶものについては、この答えは正しくありません。Javaは「コンピュータ名」、つまり起動プロセスの早い段階でコンピュータに割り当てられた、ネットワークとは無関係の名前を取得する方法がありません。すべてのOSにこの概念がありますが、残念ながらこの値はJavaで公開されていません。ただし、常にではありませんが、多くの場合、上記のメソッドは実際にコンピュータ名を返します。説明については、stackoverflow.com / a / 40702767/1504556を参照してください。
peterh

91

現在ログインしているユーザーを取得するには:

System.getProperty("user.name");

マシンのホスト名を取得するには:

InetAddress.getLocalHost().getHostName();

あなたの質問の最後の部分に答えるために、Java APIはgetHostName()が返すと言っています

このIPアドレスのホスト名、またはセキュリティチェックで操作が許可されていない場合は、IPアドレスのテキスト表現。


OPのすべての元の質問に1つ明確かつ簡潔に回答することに賛成票を投じてください。確かにこれは受け入れられる答えになるはずです
アンディ

1
@Andyに同意する-すべてのポイントに対する明確で簡潔な回答に対する賛成投票。
Paul Eden、

9

user.name環境変数が偽造される可能性があるため、使用は安全ではありません。あなたが使っていた方法は良いです、UNIXベースのOSにも同様の方法があります


これ Windows専用ですか?これを行うためのプラットフォームに依存しない方法はありますか?
スチュアートR.ジェフリーズ2012

7
システムプロパティは環境変数ではありません。環境変数にはSystem.getenv( "USER")を使用します。System.propertiesは引き続きjavaコマンドラインでjava -Duser.name = someoneelseを使用してユーザーが設定できるため、まだ安全ではありません
dan carter

「UNIXベースのOSにも同様の方法があります」:ありがとう、私が探していたもの。では、これらのOSの方法は何ですか?私の研究、現在私を行っている...ここ:)「whoami」を使用して?
pdem

スパムで申し訳ありませんが、Cで一種の解決策を提供するためにここに来ました::stackoverflow.com/questions/1451825/…したがって、基本的に、Cコード "getpwuid(getuid())"でwhoamiまたはJNIを使​​用する必要があります。UnixSystemクラスはもうありません。
pdem

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.