我目前正在写一个Java应用程序与一个ActiveDirectory的authed一个Windows的计算机中使用。该应用程序基本上只需要知道用户名和主机名。我知道有

System.getProperty("user.name")

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

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

所以,我想知道如果有一个更好,更安全的方式来处理这个问题,并偶然发现的 NTSystem 。 但NTSystem似乎并没有提供在Linux上(我使用的开发),这 - 我认为 - 是由于调用本机Windows代码

我的问题将因此是:“有没有检索登录的用户名在Windows中,如果是一个安全的方式 - 你将如何实现这一目标?”

有帮助吗?

解决方案

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

显然NTSystem不会在Linux上工作,但你提到你在写一个GUI可以在Windows上运行。你们是不是要验证用户的Windows用户名?您可以通过嵌入在NTSystem做到这一点的运行于Windows客户端的,但不会(当然)代码的Linux OS下运行的代码。

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

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

切换可插拔识别层

其他提示

使用 JNA ,com.sun.platform.jna.win32已经许多方法做这种包装在Win32 API。尝试Advapi32Util.getUserName或Kernel32Util.getUserNameEx。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top