使用Java应用程序的本地Windows身份验证,64位
给定用户名和明文密码,我们的应用程序当前使用Jawin FuncPtr访问advapi32.dll的LogonUser函数来验证是否存在具有这些凭据的本地用户。 然而,我在网上看到,目前没有32位版本的Jawin dll,这是一个问题,因为我们希望将此应用程序移植到64位系统,并且要求在这些系统上使用64位Java(据我所知,即使dll放在WOW文件夹中,也无法访问32位dll)。 我一直在试图找到一种方法来使用Jacob项目,而不是使用Jawin,因为我们已经在其他地方使用了它,有一个64位版本,我注意到可以使用以下内容为用户获取组信息(去掉异常逻辑;用户名是前面传入的字符串): 因此,如果我可以获得用户的组信息,我也应该能够对用户进行身份验证,希望通过非常类似的方式。我首先尝试用advapi32.dll构建一个新的ActiveXComponent,因为Jawin使用的是advapi32.dll,但发现advapi32.dll不是有效的COM对象。 我尝试了本文标题的几种同义词组合,包括专门搜索将处理本地身份验证的COM对象/程序ID(针对ActiveXComponent)。到目前为止,我所发现的是: -如何获取当前凭据。但是,在我们的应用程序的许多情况下,当前用户凭据与用于登录应用程序的凭据不同 -如何通过LDAP或类似协议进行身份验证。该应用程序仅用于访问本地用户组,不会安装Active Directory等 -如何通过系统类/JNI加载库(例如advapi32.dll),尽管无法找到如何从advapi32.dll调用方法,而且我非常确定它不是以这种方式使用的 我知道我可能只是错过了谷歌的正确词汇/正确的想法,所以任何指导都会很有帮助。使用Jacob只是一种偏好,因为我们已经在使用它;如果有更好的东西可以在32位和64位系统上访问(我们不想在这些体系结构之间做太多更改),请让我知道使用Java应用程序的本地Windows身份验证,64位,java,authentication,activex,local,jacob,Java,Authentication,Activex,Local,Jacob,给定用户名和明文密码,我们的应用程序当前使用Jawin FuncPtr访问advapi32.dll的LogonUser函数来验证是否存在具有这些凭据的本地用户。 然而,我在网上看到,目前没有32位版本的Jawin dll,这是一个问题,因为我们希望将此应用程序移植到64位系统,并且要求在这些系统上使用64位Java(据我所知,即使dll放在WOW文件夹中,也无法访问32位dll)。 我一直在试图找到一种方法来使用Jacob项目,而不是使用Jawin,因为我们已经在其他地方使用了它,有一个64位版
也请随时告诉我,如果我的张贴可以有所改善。我在这个网站上读了很多文章,但这是我的第一篇帖子。使用华夫格JNA 1.5进行测试,工作起来就像一个美女,编码麻烦少了很多(尽管我们没有引入更多的依赖项)。
希望这能帮助其他有同样问题的人。目前我正在研究华夫饼干,因为我刚刚发现了这一点(当然,在发布这个问题5分钟后)。如果还有什么我应该看的,或者更好的是,如果有一种方法可以通过雅各布做到这一点,而我却错过了,我仍然很想听到它。
ActiveXComponent network = new ActiveXComponent("WScript.Network");
String computerName = network.getPropertyAsString("ComputerName");
String path = "WinNT://" + computerName + "/" + username;
ActiveXComponent user = new ActiveXComponent(path);
Dispatch groupsCollection = Dispatch.call(user.getObject(), "Groups").toDispatch();