Nama mesin Java saat ini dan pengguna yang login?


153

Apakah mungkin untuk mendapatkan nama pengguna yang saat ini masuk (Windows / Unix) dan nama host mesin?

Saya berasumsi itu hanya properti dari beberapa kelas lingkungan statis.

Saya menemukan ini untuk nama pengguna

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

dan ini untuk nama mesin:

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

catch(Exception ex) {
    ...
}

Apakah yang pertama hanya untuk Windows?

Dan apa yang akan dilakukan yang kedua, jika Anda tidak memiliki set nama host?


The NTSystemkelas hanya ada pada Windowsdistribusi JDK
BullyWiiPlaza

Jawaban:


256

Untuk mendapatkan pengguna yang saat ini masuk:

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

dan nama host mesin:

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

1
Apakah System.getProperty("user.name"); bekerja di windows dan linux?
Lele

5
Namun, user.namenilainya dapat dipalsukan , sehingga tidak boleh digunakan untuk otentikasi.
Raedwald

14
System.getProperty ("user.name") TIDAK saat ini masuk pengguna, itu pengguna di bawah siapa konteks keamanan JVM berjalan.
rkosegi

1
Mengenai apa yang OP sebut sebagai "nama mesin" atau "nama komputer", jawaban ini salah. Java tidak memiliki cara untuk mendapatkan "nama komputer", yaitu nama yang ditetapkan untuk komputer sejak awal dalam proses boot dan tidak terkait dengan jaringan. Semua OS memiliki konsep ini, tetapi sayangnya nilai ini tidak diekspos di Jawa. Namun sering - tetapi tidak selalu - metode di atas memang akan mengembalikan nama komputer. Lihat stackoverflow.com/a/40702767/1504556 untuk penjelasannya.
peterh

91

Untuk mendapatkan pengguna yang saat ini masuk:

System.getProperty("user.name");

Untuk mendapatkan nama host mesin:

InetAddress.getLocalHost().getHostName();

Untuk menjawab bagian terakhir dari pertanyaan Anda, Java API mengatakan bahwa getHostName () akan kembali

nama host untuk alamat IP ini, atau jika operasi tidak diizinkan oleh pemeriksaan keamanan, representasi tekstual dari alamat IP.


Suara positif untuk menjawab semua pertanyaan awal OPs bar satu dengan jelas dan ringkas. Tentunya ini seharusnya jawaban yang diterima
Andy

1
Setuju dengan @Andy - pilih suara untuk jawaban yang jelas dan ringkas untuk semua poin.
Paul Eden

9

Penggunaan user.nametidak aman karena variabel lingkungan dapat dipalsukan. Metode yang Anda gunakan baik, ada metode serupa untuk OS berbasis unix juga


Jadi ini adalah hanya untuk windows? Apakah ada platform cara independen untuk melakukan ini?
Stuart R. Jefferys

7
Properti sistem bukan variabel lingkungan. Gunakan System.getenv ("USER") untuk variabel lingkungan. System.properties masih dapat disetel oleh pengguna di java commandline dengan java -Duser.name = someoneelse jadi masih tidak aman
dan carter

"Ada metode serupa untuk OS berbasis unix juga": Terima kasih, apa yang saya cari. Jadi apa metode untuk OS ini? penelitian saya, saat ini dilakukan saya ... di sini :) menggunakan "whoami"?
pdem

Maaf atas spam, saya datang ke sini untuk memberikan semacam solusi di C:: stackoverflow.com/questions/1451825/... Jadi pada dasarnya, kita harus menggunakan whoami atau JNI dengan kode C "getpwuid (getuid ())" . Tidak ada kelas UnixSystem lagi.
pdem

0

Untuk mendapatkan jalur pengguna yang saat ini masuk:

System.getProperty("user.home");
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.