Java当前机器名称和登录用户?

Oma*_*eji 149 java environment

是否可以获取当前登录用户的名称(Windows/Unix)和机器的主机名?

我假设它只是某些静态环境类的属性.

我找到了这个用户名

com.sun.security.auth.module.NTSystem NTSystem = new
        com.sun.security.auth.module.NTSystem();
System.out.println(NTSystem.getName());
Run Code Online (Sandbox Code Playgroud)

这对于机器名称:

import java.net.InetAddress;
...
String computerName;
...
try {
    computerName = InetAddress.getLocalHost().getHostName();
}

catch(Exception ex) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

是第一个仅适用于Windows?

如果你没有设置主机名,那么第二个会做什么?

小智 247

要获取当前登录的用户:

System.getProperty("user.name"); //platform independent 
Run Code Online (Sandbox Code Playgroud)

和机器的主机名:

java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
System.out.println("Hostname of local machine: " + localMachine.getHostName());
Run Code Online (Sandbox Code Playgroud)

  • System.getProperty("user.name")当前未登录用户,其用户的安全上下文是JVM运行. (11认同)
  • 但是,`user.name`值[可以欺骗](http://stackoverflow.com/a/27899761/545127),因此不应该用于身份验证. (5认同)
  • 做`System.getProperty("user.name"); ` 在 windows 和 linux 上都可以工作吗? (3认同)
  • 至于OP所说的“机器名称”或“计算机名称”,这个答案是不正确的。Java 无法获取“计算机名称”,即在启动过程早期分配给计算机且与网络无关的名称。所有操作系统都有这个概念,但不幸的是这个值没有在 Java 中公开。然而,通常(但并非总是)上述方法确实会返回计算机名称。有关说明,请参阅http://stackoverflow.com/a/40702767/1504556。 (2认同)

Bil*_*ard 85

要获取当前登录的用户:

System.getProperty("user.name");
Run Code Online (Sandbox Code Playgroud)

要获取机器的主机名:

InetAddress.getLocalHost().getHostName();
Run Code Online (Sandbox Code Playgroud)

为了回答问题的最后部分,Java API说getHostName()将返回

此IP地址的主机名,或者如果安全检查不允许该操作,则为IP地址的文本表示形式.


小智 9

使用user.name不安全,因为环境变量可能是伪造的.您使用的方法很好,基于unix的操作系统也有类似的方法

  • 系统属性不是环境变量.将System.getenv("USER")用于环境变量.用户可以在Java命令行上使用java -Duser.name = someoneelse设置System.properties,因此仍然不安全 (7认同)