101 votes

Obtenez de connexion nom d'utilisateur en java

Comment puis-je obtenir le nom d'utilisateur/nom de connexion en Java?

C'est le code que j'ai essayé...

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

Je reçois SecurityException lorsque j'essaie d'exécuter ce code. Quelqu'un pourrait-il me dire si je suis dans la bonne direction, et m'aider à comprendre le problème.

240voto

dfa Points 54490
System.getProperty("user.name")

28voto

newacct Points 42530

sous Unix:

new com.sun.security.auth.module.UnixSystem().getUsername()

dans Windows:

new com.sun.security.auth.module.NTSystem().getName()

dans Solaris:

new com.sun.security.auth.module.SolarisSystem().getUsername()

16voto

celsowm Points 554

inspiré par @newacct's réponse, un code qui peut être compilé dans toute plate-forme:

Class<?> c = null;
       Object   o = null;
       Method  method = null;  

       if(System.getProperty("os.name").toLowerCase().contains("windows")){

           c = Class.forName("com.sun.security.auth.module.NTSystem");

           o = Class.forName("com.sun.security.auth.module.NTSystem").newInstance();

           method = c.getDeclaredMethod ("getName");

       }

       if(System.getProperty("os.name").toLowerCase().contains("linux")){

           c = Class.forName("com.sun.security.auth.module.UnixSystem");

           o = Class.forName("com.sun.security.auth.module.UnixSystem").newInstance();

           method = c.getDeclaredMethod ("getUsername");

       }

       if(System.getProperty("os.name").toLowerCase().contains("solaris")){

           c = Class.forName("com.sun.security.auth.module.SolarisSystem");

           o = Class.forName("com.sun.security.auth.module.SolarisSystem").newInstance();

           method = c.getDeclaredMethod ("getUsername");

       }

       if(c != null){
            System.out.println(method.invoke(o));
       }

15voto

pdjota Points 1127

Système.getProperty("user.name") n'est pas une bonne option de sécurité depuis que la variable d'environnement pourrait être truqué: C:\ USERNAME="Jean Dupont" java ... // vous donnera Système.getProperty("user.name") Vous devriez faire:

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

JDK 1.5 et plus.

Je l'utilise dans une applet, et il doit être signé. info source

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X