2009-07-16 88 views
1

我目前正在编写一个Java应用程序,用于与ActiveDirectory验证的Windows计算机。应用程序基本上只需要知道用户的名称和主机名。我知道有在Windows中检索登录用户的名称和主机名称

System.getProperty("user.name")

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

但我不知道阉System.getProperty( “user.name”)将与Windows上运行的虚拟机正常工作(我搜索谷歌,并发现很多线程说,它可能可能不适用于Windows,因为它可能会返回不同的东西,取决于环境变量 (我目前无法测试它[我运行的Ubuntu和一个rchLinux])。

所以,我想知道是否有更好更安全的方法来处理这个问题,并偶然发现NTSystem。 但是NTSystem似乎并没有在Linux上使用(我用它来开发),我认为这是因为调用了本地windows代码。

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

+0

user.name应该与平台无关,但运行一个测试程序并亲自查看。 – akarnokd 2009-07-16 08:40:18

+0

但是任何人都可以通过-Duser.name = XYZ覆盖它,所以它本质上是不安全的 – 2009-07-16 08:47:08

回答

1

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

很明显NTSystem在Linux上不起作用,但你提到你正在编写一个GUI来在Windows上运行。你想验证用户的Windows用户名吗?您可以通过嵌入中的NTSystem来实现,该代码在Windows客户端上运行,但是而不是(当然)在Linux OS下运行的代码。

或者你想在Linux服务器上验证它们吗?也许你有一个kerberos域,你可以做到这一点? (即如果有kerberos域,那么你可以有客户端和服务器之间的安全,认证的通信,确保客户是谁,他们说他们是)

编辑我可以通过这样的事实混淆你在说你正在编写一个Java应用程序“在Linux中”。我认为这是一个Linux服务器和Windows客户端 - 但可能你只是说你使用Lenux作为你的开发环境?在这种情况下,你可能会认为写,你可以使用NTSystem在Windows中,并user.name之间测试

1

使用JNA切换可插拔识别层,com.sun.platform.jna.win32有许多方法做这个包装Win32 API。试试Advapi32Util.getUserName或Kernel32Util.getUserNameEx。

相关问题