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 obtenir un 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.
- J'ai peur de mal vous comprendre, mais je ne comprends pas votre question. Quel login nom d'utilisateur? Windows/GNU Linux connexion? L'authentification de base sur un serveur web?
- Il est impossible de comprendre quoi que ce soit quand pas les détails sont affichés
- Désolé les gars. Je suis nouveau sur Java et c'est un peu dur à faire sens aujourd'hui.
Vous devez vous connecter pour publier un commentaire.
sous Unix:
dans Windows:
dans Solaris:
user.name
propriété devrait être nulle. Je suis d'accord avec @JinKim, ne pas écrire OS dépendant de trucs.com.sun
classes ne sont pas accessibles par défaut en Java 9+. Cette solution ne fonctionne pas pour elle.Système.getProperty("user.name") n'est pas une bonne option de sécurité depuis que la variable d'environnement pourrait être truqué:
C:\ set USERNAME="Jean Dupont"
java ...
//vous donnera Système.getProperty("user.name")
Vous devriez faire:
JDK 1.5 et plus.
Je l'utilise dans une applet, et il doit être signé.
info source
com.sun.security.auth.module.NYSystem
plus élevé dans le classpath? Je ne sais pas si le Java runtime tente de prévenir contre de tels exploits, mais je ne pense pas qu'il y aura des unfakeable moyen de "sécuriser", sauf par l'exécution de code sur une case qui est inaccessible à la potentiellement malveillants client.inspiré par @newacct's réponse, un code qui peut être compilé dans toute plate-forme:
com.sun
classes ne sont pas accessibles par défaut en Java 9+. Cette solution ne fonctionne pas pour elle.À l'aide de JNA simple:
https://github.com/java-native-access/jna
La 'set Username="nom d'utilisateur" ' est un surpassement temporaire, qui n'existe que tant que le cmd de windows est toujours en place, une fois qu'il est tué, la variable perd de la valeur. Je pense donc que le
est encore un peu et précis, le code à utiliser.
System.getenv().get("USERNAME");
- fonctionne sur windows !
Dans les propriétés de l'environnement que vous avez les informations dont vous avez besoin au sujet de l'ordinateur et de l'hôte! Je suis en train de dire encore! Fonctionne sur WINDOWS !
System.getenv("username")
? 🙂