0

给定用户名和明文密码,我们的应用程序当前使用 Jawin FuncPtr 验证本地用户是否存在这些凭据,以访问 advapi32.dll 的 LogonUser 函数。但是,在网上看到目前没有32位版本的Jawin dll,这是一个问题,因为我们要将此应用程序移植到64位系统上,并且需要使用64位Java这些系统(据我所知,即使 DLL 位于 WOW 文件夹中,也无法访问 32 位 DLL)。我一直在尝试找到一种方法来使用 Jacob 项目,而不是使用 Jawin,因为我们已经在其他地方使用它,有一个 64 位版本,我注意到可以使用以下内容获取用户的组信息(取出异常逻辑;用户名是之前传入的字符串):

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();

因此,如果我可以获得用户的组信息,我应该也能够验证用户,希望通过非常相似的方式。我首先尝试使用 advapi32.dll 构建一个新的 ActiveXComponent,因为 Jawin 正在使用它,但发现 advapi32.dll 不是有效的 COM 对象。我为这篇文章的标题尝试了几种同义词组合,包括专门搜索将处理本地身份验证的 COM 对象/程序 ID(用于 ActiveXComponent)。到目前为止,我发现的是:

-如何获取当前凭据。然而,在我们的应用程序的许多情况下,当前用户凭据与用于登录应用程序的凭据不同。

-如何通过 LDAP 或类似协议进行身份验证。该应用程序仅用于访问本地用户组,​​不会安装 Active Directory 等。

-如何通过系统类/JNI 加载库(例如 advapi32.dll),虽然找不到如何从 advapi32.dll 调用方法,我很确定它不是为这种方式设计的。

我知道我可能错过了谷歌/正确想法的正确词,所以任何指导都会有所帮助。使用 Jacob 只是一种偏好,因为我们已经在使用它了;如果有更好的东西可以在 32 位和 64 位系统上访问(我们不想在这些架构之间进行太多更改),请告诉我。

也随时告诉我我的帖子是否可以以某种方式改进。我从这个网站读了很多,但这是我的第一篇文章。

4

1 回答 1

0

使用 WAFFLE JNA 1.5 进行测试,工作起来就像一个美女,编码麻烦少了很多(尽管确实有更多我们尚未引入的依赖项)。希望这可以帮助其他有同样问题的人。

于 2013-05-02T16:50:20.497 回答