it-swarm.com.de

Holen Sie sich den Login-Benutzernamen in java

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.

83
George Profenza
System.getProperty("user.name")
202
dfa

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()
30
newacct

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 ) );
}
15
celsowm

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

15
pdjota

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);

https://github.com/Java-native-access/jna

6
ANTARA

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.

2
Newtoxton

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!

1
Dragos Roban