Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java应用程序的本地Windows身份验证,64位_Java_Authentication_Activex_Local_Jacob - Fatal编程技术网

使用Java应用程序的本地Windows身份验证,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位版

给定用户名和明文密码,我们的应用程序当前使用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位系统上访问(我们不想在这些体系结构之间做太多更改),请让我知道


也请随时告诉我,如果我的张贴可以有所改善。我在这个网站上读了很多文章,但这是我的第一篇帖子。

使用华夫格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();