1

我目前正在编写一个 Java 应用程序,以与通过 ActiveDirectory 进行身份验证的 Windows 机器一起使用。应用程序基本上只需要知道用户名和主机名。我知道有

System.getProperty("user.name")

java.net.InetAddress.getLocalHost().getHostName()

但我不确定 System.getProperty("user.name") 是否会在 Windows 上运行的 VM 上正常运行(我搜索了谷歌并发现很多线程说它可能不适用于 Windows,因为它可能会返回不同的东西,取决于环境变量(我目前无法测试它[我正在运行 ubuntu 和 archLinux])。

所以,我想知道是否有更好、更安全的方法来处理这个问题并偶然发现了NTSystem。但是 NTSystem 似乎在 Linux(我用于开发)上不可用,我认为这是由于调用了本机 Windows 代码。

因此,我的问题是:“是否有一种安全的方法可以在 Windows 中检索登录用户的名称,如果是,您将如何实现?”

4

2 回答 2

1

user.name本质上是不安全的,因为它可以通过-Duser.name=XYZ. 这可能是您的问题,也可能不是

显然NTSystem无法在 Linux 上运行,但您提到您正在编写要在 Windows 上运行的 GUI。您是否尝试验证用户的 Windows 用户名?您可以通过NTSystem嵌入在Windows 客户端上运行的代码不是(当然)在Linux OS.

或者您是否尝试在 Linux 服务器上验证它们?也许您有一个kerberos可以做到这一点的域?(即,如果有一个kerberos域,那么您可以在客户端和服务器之间进行安全、经过身份验证的通信,确保客户端是他们所说的那个人)

编辑我可能对您说您正在“在 Linux”中编写 Java 应用程序这一事实感到困惑。我认为这是指 Linux 服务器和 Windows 客户端——但您可能只是说您正在使用 Lenux 作为开发环境?NTSystem在这种情况下,您可能会考虑编写一个可插入的标识层,您可以在 Windows 机器上使用和user.name测试之间切换

于 2009-07-16T08:47:34.577 回答
1

使用JNA, com.sun.platform.jna.win32 有许多方法可以包装 Win32 API。试试 Advapi32Util.getUserName 或 Kernel32Util.getUserNameEx。

于 2010-10-01T12:14:54.437 回答