在Windows中检索登录用户的名称和主机名

时间:2009-07-16 08:38:23

标签: java windows unix nt

我目前正在编写一个Java应用程序,用于与ActiveDirectory一起使用的Windows机器。应用程序基本上只需要知道用户的名字和主机名。我知道有

System.getProperty("user.name")

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

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

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

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

2 个答案:

答案 0 :(得分:1)

user.name 固有的不安全,因为它可以通过-Duser.name=XYZ覆盖。这可能是一个问题,或者可能不是

显然NTSystem无法在Linux上运行,但你提到你正在编写一个在Windows上运行的GUI。您是否尝试验证用户的Windows用户名?您可以通过嵌入在 Windows客户端上运行的代码中的NTSystem执行此操作,但(当然)代码在Linux OS下运行。

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

编辑我可能会因为你说你在Linux中编写Java应用程序而感到困惑。我认为这意味着Linux服务器和Windows客户端 - 但您可能只是意味着您使用Lenux作为开发环境?在这种情况下,您可能会考虑编写一个可插入的标识层,您可以使用Windows框中的NTSystemuser.name进行测试来切换

答案 1 :(得分:1)

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