Wie kann ich den Benutzernamen/Login-Namen in Java bekommen?
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 erhalte ein 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.
System.getProperty("user.name")
in Unix:
new com.Sun.security.auth.module.UnixSystem().getUsername()
in Windows:
new com.Sun.security.auth.module.NTSystem().getName()
in Solaris:
new com.Sun.security.auth.module.SolarisSystem().getUsername()
inspiriert von der Antwort von @ newacct, einem Code, der auf jeder Plattform kompiliert werden kann:
String osName = System.getProperty( "os.name" ).toLowerCase();
String className = null;
String methodName = "getUsername";
if( osName.contains( "windows" ) ){
className = "com.Sun.security.auth.module.NTSystem";
methodName = "getName";
}
else if( osName.contains( "linux" ) ){
className = "com.Sun.security.auth.module.UnixSystem";
}
else if( osName.contains( "solaris" ) || osName.contains( "sunos" ) ){
className = "com.Sun.security.auth.module.SolarisSystem";
}
if( className != null ){
Class<?> c = Class.forName( className );
Method method = c.getDeclaredMethod( methodName );
Object o = c.newInstance();
System.out.println( method.invoke( o ) );
}
System.getProperty ("user.name") ist keine gute Sicherheitsoption, da diese Umgebungsvariable gefälscht werden könnte: C:\set USERNAME = "Joe Doe" Java ... // will Geben Sie "System.getProperty" ("user.name") ein. Sie sollten Folgendes tun:
com.Sun.security.auth.module.NTSystem NTSystem = new com.Sun.security.auth.module.NTSystem();
System.out.println(NTSystem.getName());
JDK 1.5 und höher.
Ich benutze es in einem Applet und es muss signiert werden. Infoquelle
Mit JNA ist es einfach:
String username = Advapi32Util.getUserName();
System.out.println(username);
Advapi32Util.Account account = Advapi32Util.getAccountByName(username);
System.out.println(account.accountType);
System.out.println(account.domain);
System.out.println(account.fqn);
System.out.println(account.name);
System.out.println(account.sidString);
Das 'set Username = "Username"' ist eine temporäre Überschreibung, die nur besteht, solange das cmd-Fenster noch aktiv ist. Nach dem Beenden verliert die Variable an Wert. Also ich denke das
System.getProperty ("user.name");
ist immer noch ein kurzer und präziser Code zu verwenden.
System.getenv().get("USERNAME");
- funktioniert unter Windows!
In den Umgebungseigenschaften haben Sie die Informationen, die Sie über Computer und Host benötigen! Sage ich nochmal! Funktioniert unter WINDOWS!