जावा वर्तमान मशीन का नाम और उपयोगकर्ता में लॉग इन किया?


153

क्या उपयोगकर्ता (विंडोज / यूनिक्स) और मशीन के होस्टनाम में वर्तमान में लॉग इन का नाम प्राप्त करना संभव है?

मुझे लगता है कि यह कुछ स्थिर पर्यावरण वर्ग की संपत्ति है।

मैंने इसे उपयोगकर्ता नाम के लिए पाया है

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) {
    ...
}

क्या पहला विंडोज के लिए है?

और अगर आपके पास एक होस्टनाम सेट नहीं है, तो दूसरा क्या करेगा?


यह 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"); विंडोज़ और लिनक्स दोनों पर काम करता है ?
कैटफ़िश

5
हालाँकि, user.nameमान खराब हो सकता है , इसलिए इसे प्रमाणीकरण के लिए उपयोग नहीं किया जाना चाहिए।
राएडवाल्ड

14
System.getProperty ("user.name") वर्तमान में उपयोगकर्ता में लॉग इन नहीं है, यह उपयोगकर्ता है जो सुरक्षा संदर्भ JVM है।
rkosegi

1
ओपी को "मशीन नाम" या "कंप्यूटर नाम" के रूप में संदर्भित करने के लिए यह उत्तर गलत है। जावा के पास "कंप्यूटर का नाम" प्राप्त करने का कोई तरीका नहीं है, अर्थात बूट प्रक्रिया में कंप्यूटर को जल्दी से सौंपा गया नाम और नेटवर्क से असंबंधित। सभी OS'es में यह अवधारणा है, लेकिन दुर्भाग्य से जावा में यह मान उजागर नहीं हुआ है। हालांकि अक्सर - लेकिन हमेशा नहीं - उपरोक्त विधि वास्तव में कंप्यूटर का नाम वापस कर देगी। स्पष्टीकरण के लिए stackoverflow.com/a/40702767/1504556 देखें ।
peterh

91

वर्तमान में उपयोगकर्ता को लॉग इन करने के लिए:

System.getProperty("user.name");

मशीन का होस्ट नाम पाने के लिए:

InetAddress.getLocalHost().getHostName();

अपने प्रश्न के अंतिम भाग का उत्तर देने के लिए, जावा एपीआई का कहना है कि getHostName () वापस आ जाएगा

इस आईपी पते के लिए होस्ट नाम, या यदि सुरक्षा जांच की अनुमति नहीं है, तो आईपी पते का पाठ प्रतिनिधित्व।


सभी ओपी मूल सवालों के जवाब देने के लिए एक स्पष्ट और संक्षिप्त रूप से अपवोट करें। निश्चित रूप से यह स्वीकृत उत्तर होना चाहिए
एंडी

1
सभी बिंदुओं के स्पष्ट और संक्षिप्त उत्तर के लिए @Andy - अप-वोट से सहमत हों।
पॉल ईडन

9

का उपयोग करते हुए user.name सुरक्षित नहीं है क्योंकि पर्यावरण चर को नकली किया जा सकता है। आपके द्वारा उपयोग किया जा रहा तरीका अच्छा है, यूनिक्स आधारित ओएस के लिए भी इसी तरह के तरीके हैं


तो यह है सिर्फ खिड़कियों के लिए? क्या ऐसा करने के लिए एक स्वतंत्र मंच है ?
स्टुअर्ट आर। जेफरीज़

7
सिस्टम गुण पर्यावरण चर नहीं हैं। पर्यावरण चर के लिए System.getenv ("USER") का उपयोग करें। System.properties को java कमांडलाइन पर java के साथ यूजर द्वारा अभी भी सेट किया जा सकता है -Duser.name = कोई व्यक्ति अभी भी सुरक्षित नहीं है
dan carter

"यूनिक्स आधारित ओएस के लिए भी इसी तरह के तरीके हैं": धन्यवाद, मैं क्या देख रहा था। तो इन OS के लिए क्या तरीका है? मेरे शोध, वर्तमान में मुझे ... यहाँ "whoami" का उपयोग करके आयोजित किया गया?
pdem

स्पैम के लिए क्षमा करें, मैं सी में एक प्रकार का समाधान देने के लिए यहां आता हूं: stackoverflow.com/questions/1451825/… इसलिए मूल रूप से, हमें सी कोड "गेटप्विड (गेट्यूड ())" के साथ यामी या जेएनआई का उपयोग करना होगा। । अब कोई क्लास यूनिक्स सिस्टम नहीं हैं।
pdem

0

वर्तमान में उपयोगकर्ता पथ में लॉग इन करने के लिए:

System.getProperty("user.home");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.