0

ユーザー名とプレーンテキストのパスワードを指定すると、アプリケーションは現在、Jawin FuncPtr を使用して advapi32.dll の LogonUser 関数にアクセスし、それらの資格情報を持つローカル ユーザーが存在することを確認します。しかし、オンラインで私は現在 Jawin dll の 32 ビット バージョンがないことを確認しました。これは、このアプリケーションを 64 ビット システムに移植する必要があり、64 ビット Java を使用する必要があるため問題です。これらのシステム (私が見た限りでは、DLL が WOW フォルダーに配置されていても、32 ビット DLL にアクセスできません)。Jawin を使用する代わりに、Jacob プロジェクトを使用する方法を見つけようとしています。既に他の場所で使用しているため、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();

したがって、ユーザーのグループ情報を取得できれば、うまくいけば非常に似た方法でユーザーを認証できるはずです。Jawin が使用していた advapi32.dll を使用して新しい ActiveXComponent を作成しようとしましたが、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 に答える