【问题标题】:Fetching user name (windows) from a java application从 java 应用程序中获取用户名(windows)
【发布时间】:2013-04-19 14:53:40
【问题描述】:

问题:

我正在使用以下凭据登录虚拟机 (RDC):

用户是名为 teldept 的域组的一部分

用户:147852 密码:helloworld

当我尝试从 java 应用程序获取用户详细信息时,它给了我:147852

但是当我点击顶部的开始菜单时,我可以看到我的名字显示出来。

这是怎么做到的?我想从 java 应用程序中访问这个名称

我使用下面的sn-p:

System.getProperty("user.name");

上面的 sn-p 给我的任何东西都是正确的,作为 aper oracle 文档。 我正在使用 ID 登录:147852 及以上 sn-p 给我 14852 但是在 Windows 中这个 ID:147852 是如何映射到我的名字的,所以只有在 XP 的开始菜单中我才会显示我的名字而不是 147852。我们需要知道这个映射是如何在 ID 和 Name 之间完成的。我猜它与域或一些我不擅长的网络逻辑有关。

【问题讨论】:

  • 你是怎么得到“147852”的?发布该 sn-p 代码。
  • @user93353 我已经编辑了这个问题。我希望我的观点并不清楚。
  • 如果你从命令行运行 java 程序 - USERNAME env 变量包含什么 - 试试echo %USERNAME%
  • @user93353 感谢您的帮助。当我运行上述建议时,我得到 147852
  • 你试过我下面的答案吗 - 使用新的 com.sun.security.auth.module.NTSystem().getName();这给了什么?

标签: java windows networking windows-xp user-management


【解决方案1】:

XP 开始菜单上显示的名称不是登录名。它是与登录名相对应的全名。不确定您的登录名是本地登录名还是域登录名。如果是本地登录,请转到管理工具 -> 计算机管理 -> 用户和组 -> 在此处针对您的用户名 (147852),您将找到一个全名。 如果您的登录名是域登录名,您可以类似地在 Active Directory 中查找您的姓名 - 或在其他地方搜索。

这是非常特定于操作系统的,Java 无法找到。 您需要使用 JNI 和 Windows API 执行此操作 - 根据用户类型调用 GetUserNameExNetUserGetInfo

如果您只想获取您的登录名 (147852),调用 com.sun.security.auth.module.NTSystem().getName 比使用 System.getProperty("user.name") 更好

【讨论】:

    【解决方案2】:

    来自this SO question,您可以使用:

    System.getProperty("user.name");
    

    返回当前登录的用户。这将返回用户名字符串。我相信这就是您的要求,但是您的问题还不清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多