【问题标题】:How to get Windows username in Java?如何在 Java 中获取 Windows 用户名?
【发布时间】:2013-11-28 04:40:02
【问题描述】:

所以我想做的是让我的 Java 找到登录 windows 的用户名,所以当我说这样的方法时,它会返回用户名,就像我在名为 Noah 的用户中使用它一样,java 会返回“Noah”,如果我是用户 Amanda,Java 会返回“Amanda”。我该怎么做?

【问题讨论】:

标签: java windows


【解决方案1】:

查找系统属性“user.name”。

String username = System.getProperty("user.name");

演示:Main.java

public class Main {
   public static void main(String[] args) {
      System.out.println(System.getProperty("user.name"));
   }
}

输出:

c:\dev\src\misc>javac Main.java

c:\dev\src\misc>java Main
rgettman

c:\dev\src\misc>

【讨论】:

  • 答案应该是这样的。这解决了我目前的问题,并且教会了我额外的奖励。
【解决方案2】:

试试:

String userName = System.getProperty("user.name");

String userName = new com.sun.security.auth.module.NTSystem().getName()

【讨论】:

  • 我喜欢这个响应,因为当一些 java 应用程序作为 Windows 服务运行时,如果服务在用户登录之前启动而不是当前启动,则 System.getProperty("user.name") 返回“SYSTEM”拨打电话时登录的用户。 NTSystem.getName() 在调用时返回当前记录的用户名。本机方法在实现特定于 Windows 的逻辑以及人们在作为 Windows 服务运行时遇到由 System.getProperty("user.name") 返回的用户“SYSTEM”时很有用。
  • @SanjivJivan For me new NTSystem().getName() 返回 SYSTEM 作为 Windows 服务运行,在任何之前以及在使用 Windows 用户登录之后使用 jre1.8.0_201。
  • 注意使用 System.getProperty("user.name");不安全,很容易欺骗,比如使用 -Duser.name=Admin 或在命令行中更改。
【解决方案3】:

两种方式

  1. System.getProperty("user.name");

  2. System.getenv("USERNAME");

两者都适用于任何操作系统

【讨论】:

  • 环境变量 USERNAME 可能在不同版本的 Windows 上可用,但在 macOS(选中 Catalina)或 Linux/GNU(选中 Linux Mint)上默认不可用。您需要在这些系统上检查 USER
【解决方案4】:

当应用在 Windows 服务上运行时,NTSystem.getName() 也会返回 SYSTEM。当应用程序在 Windows 服务上运行时,无法使用 NTSystem 获取用户名

【讨论】:

  • 正如@Sanjiv Jivan 上面所说: System.getProperty("user.name") 如果服务在用户登录之前启动,而不是在调用时当前登录的用户,则返回“SYSTEM”制成。 NTSystem.getName() 在调用时返回当前记录的用户名。本机方法在实现特定于 Windows 的逻辑以及人们在作为 Windows 服务运行时遇到由 System.getProperty("user.name") 返回的用户“SYSTEM”时很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2011-01-06
  • 2020-11-02
  • 2013-04-19
  • 1970-01-01
相关资源
最近更新 更多