如何在Java中获取用户名/登录名?
这是我试过的代码......
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());
}
当我尝试运行此代码时,我得到 SecurityException
. 有人可以告诉我,我是否正朝着正确的方向前进,并帮助我理解这个问题 .
7 回答
在Unix中:
在Windows中:
在Solaris中:
System.getProperty(“user.name”)不是一个好的安全选项,因为该环境变量可能是伪造的:C:\ set USERNAME =“Joe Doe”java ... //将为您提供System.getProperty(“user . 名称“)你应该这样做:
JDK 1.5及更高版本 .
我在applet中使用它,它必须签名 . info source
灵感来自 @newacct 的答案,可以在任何平台上编译的代码:
使用JNA简单:
https://github.com/java-native-access/jna
'set Username= 1682260 '是一个临时覆盖,只有当cmd窗口仍处于运行状态时才会存在,一旦它被终止,变量就会丢失值 . 所以我认为
仍然是一个简短而精确的代码 .
System.getenv().get("USERNAME");
- 适用于Windows!在环境属性中,您可以获得有关计算机和主机的信息!我再说一遍!适用于WINDOWS!