1

通过在 JBoss 上运行的 Java 应用程序获取当前登录用户的最佳方法是什么。系统环境变量 System.getProperty("user.name") 不起作用,因为 JBoss 作为服务运行。

该应用程序在运行 Windows XP 的笔记本电脑上运行。该应用程序是基于网络的,并由特定登录的 Windows 用户使用 Internet Explorer 访问。一次只能登录 1 个 Windows 用户。应用程序需要知道哪个用户已登录才能执行基于角色的菜单和安全功能。因此客户端 (Internet Explorer) 和服务器 (JBoss) 都在同一台笔记本电脑上运行。目前,我们使用 tasklist /v 确定登录用户,然后解析输出以查找某些进程和运行它们的用户。但是,需要知道是否有更简洁的方式来获取登录的 Windows 用户。

4

4 回答 4

3

我认为这个问题真的没有多大意义。可能没有用户登录到主机 - 或者可能有多个用户。

无论如何,我都会对真正想知道这一点的设计保持警惕——Web 应用程序不应该对这类事情真正感兴趣,IMO。你想做什么?

于 2009-06-16T14:40:55.683 回答
3

字符串 uname = System.getenv("user.name")

参考:http: //download.oracle.com/javase/tutorial/essential/environment/sysprop.html

于 2010-10-22T22:25:10.983 回答
0

这假设您在用户登录时存储了一个名为 USERNAME 的环境变量:

String username = System.getenv("USERNAME");

或者,如果您想要完整的环境变量集:

Map<String, String> envMap = System.getenv();

然后遍历地图以获取您存储用户名的环境变量。

Map<String, String> envMap = System.getenv();
int mapsize = envMap.size();
Iterator i = envMap.entrySet().iterator();
for (int j = 0; j < mapsize; j++) {
    Map.Entry entry = (Map.Entry) i.next();
    Object key = entry.getKey();
    Object value = entry.getValue();
}
于 2009-06-16T16:12:54.150 回答
0

使用 JAAS 身份验证。您应该能够在 Windows 上使用 NTLM,因此用户不必做任何额外的工作。然后,在服务器上,您可以使用安全上下文来获取调用者主体。

于 2009-06-17T13:52:26.620 回答