Wie kann ich den Benutzernamen / Anmeldenamen in Java erhalten?
Dies ist der Code, den ich versucht habe ...
try{
LoginContext lc = new LoginContext(appName,new TextCallbackHandler());
lc.login();
Subject subject = lc.getSubject();
Principal principals[] = (Principal[])subject.getPrincipals().toArray(new Principal[0]);
for (int i=0; i<principals.length; i++) {
if (principals[i] instanceof NTUserPrincipal || principals[i] instanceof UnixPrincipal) {
String loggedInUserName = principals[i].getName();
}
}
}
catch(SecurityException se){
System.out.println("SecurityException: " + se.getMessage());
}
Ich bekomme eine, SecurityException
wenn ich versuche, diesen Code auszuführen. Könnte mir bitte jemand sagen, ob ich in die richtige Richtung gehe und mir helfen, das Problem zu verstehen.
Antworten:
quelle
user.name
Eigenschaftsnamen bereitstellt?unter Unix:
in Windows:
in Solaris:
quelle
user.name
Eigenschaft einfach null sein. Ich stimme @JinKim zu, schreibe keine OS-abhängigen Sachen.Inspiriert von der Antwort von @newacct , einem Code, der auf jeder Plattform kompiliert werden kann:
quelle
com.sun
Klassen kann in Java 9+ standardmäßig nicht zugegriffen werden. Diese Lösung funktioniert nicht.System.getProperty ("user.name") ist keine gute Sicherheitsoption, da diese Umgebungsvariable gefälscht werden könnte: C: \ set USERNAME = "Joe Doe" java ... // gibt Ihnen System.getProperty ("user". Name ") Du solltest tun:
JDK 1.5 und höher.
Ich benutze es in einem Applet und es muss signiert werden. Infoquelle
quelle
com.sun.security.auth.module.NYSystem
höher im Klassenpfad? Ich weiß nicht, ob die Java-Laufzeit versucht, solche Exploits zu verhindern, aber ich denke nicht, dass es eine unumstößliche Möglichkeit gibt, sie "sicher" zu machen, außer indem Code auf einer Box ausgeführt wird, auf die der potenziell böswillige Client nicht zugreifen kann .Mit JNA ist es einfach:
https://github.com/java-native-access/jna
quelle
Das 'set Username = "Username"' ist eine temporäre Überschreibung, die nur existiert, solange das cmd-Fenster noch aktiv ist. Sobald es beendet wird, verliert die Variable an Wert. Also ich denke das
ist immer noch ein kurzer und präziser Code.
quelle
System.getenv().get("USERNAME");
- funktioniert unter Windows!In den Umgebungseigenschaften haben Sie die Informationen, die Sie über Computer und Host benötigen! Ich sage es noch einmal! Funktioniert auf WINDOWS!
quelle
System.getenv("username")
? :)Unten finden Sie eine Lösung NUR für WINDOWS
In Fällen, in denen die Anwendung (wie Tomcat) als Windows-Dienst gestartet wird, geben System.getProperty ("user.name") oder System.getenv (). Get ("USERNAME") den Benutzer zurück, der den Dienst gestartet hat, und nicht den aktuell angemeldeter Benutzername.
Auch in Java 9 ist der Zugriff auf die Klassen NTSystem usw. nicht möglich
Problemumgehung für Windows: Sie können wmic verwenden , daher müssen Sie den folgenden Befehl ausführen
Wenn verfügbar, wird die Ausgabe des Formulars zurückgegeben:
Hinweis: Für Windows müssen Sie cmd / c als Präfix verwenden. Im Folgenden finden Sie ein grobes Programm als Beispiel:
quelle