Java geçerli makine adı ve oturum açmış kullanıcı?


153

Oturum açmış olan kullanıcının adını (Windows / Unix) ve makinenin ana bilgisayar adını almak mümkün müdür?

Bunun sadece bazı statik ortam sınıflarının bir özelliği olduğunu varsayıyorum.

Bunu kullanıcı adı için buldum

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

ve bu makine adı için:

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

catch(Exception ex) {
    ...
}

İlki sadece Windows için mi?

Bir ana bilgisayar adı ayarlanmamışsa ikincisi ne yapacak?


NTSystemSınıf yalnızca üzerinde var WindowsJDK dağılımlarının
BullyWiiPlaza

Yanıtlar:


256

Oturum açmış olan kullanıcıyı almak için:

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

ve makinenin ana bilgisayar adı:

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

1
System.getProperty("user.name"); Hem windows hem de linux üzerinde çalışıyor mu ?
Yayın

5
Bununla birlikte, user.namedeğer sahte olabilir , bu nedenle kimlik doğrulaması için kullanılmamalıdır.
Raedwald

14
System.getProperty ("user.name") şu anda oturum açmış DEĞİLDİR, güvenlik bağlamının JVM çalıştıran kullanıcısıdır.
rkosegi

1
OP'nin "makine adı" veya "bilgisayar adı" olarak ifade ettiği şeye gelince, bu cevap yanlıştır. Java'nın "bilgisayar adı" nı almanın bir yolu yoktur, yani önyükleme işleminin başında bilgisayara atanan ve ağla ilgisi olmayan ad. Tüm işletim sistemleri bu konsepte sahiptir, ancak maalesef bu değer Java'da gösterilmez. Ancak, yukarıdaki yöntem genellikle bilgisayar adını döndürür. Açıklama için stackoverflow.com/a/40702767/1504556 adresine bakın .
peterh

91

Oturum açmış olan kullanıcıyı almak için:

System.getProperty("user.name");

Makinenin ana bilgisayar adını almak için:

InetAddress.getLocalHost().getHostName();

Sorunuzun son kısmını yanıtlamak için Java API , getHostName () öğesinin geri döneceğini söylüyor

bu IP adresi için ana bilgisayar adı veya güvenlik denetimi tarafından işleme izin verilmiyorsa, IP adresinin metinsel olarak gösterilmesi.


OP'lerin orijinal sorularının tümünü açık ve öz bir şekilde cevaplamak için oy verin. Elbette bu kabul edilen cevap olmalı
Andy

1
@Andy ile anlaşın - tüm noktalara açık ve özlü bir cevap için oy verin.
Paul Eden

9

user.nameOrtam değişkenleri taklit edilebildiğinden kullanmak güvenli değildir. Kullandığınız yöntem iyi, unix tabanlı işletim sistemi için de benzer yöntemler var


Yani bu olduğunu sadece pencereler için? Bunu yapmanın platformdan bağımsız bir yolu var mı ?
Stuart R. Jefferys

7
Sistem özellikleri ortam değişkenleri değildir. Ortam değişkenleri için System.getenv ("USER") kullanın. System.properties, java komut satırında kullanıcı tarafından hala java -Duser.name = birisi ile ayarlanabiliyor, bu yüzden hala güvenli değil
dan carter

"Unix tabanlı işletim sistemi için de benzer yöntemler var": Teşekkürler, ben ne için bakıldı. Peki bu işletim sistemi için yöntem nedir? benim araştırma, şu anda beni burada ... burada :) "whoami" kullanarak?
pdem

Spam için özür dilerim, C'ye bir tür çözüm vermek için buraya geliyorum:: stackoverflow.com/questions/1451825/… Yani temel olarak, whoami veya JNI'yi "getpwuid (getuid ())" C koduyla kullanmalıyız . Artık UnixSystem sınıfı yok.
pdem

1

Oturum açmış olan kullanıcı yolunu almak için:

System.getProperty("user.home");
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.