更新:以下の問題のコンテキスト。私の目標は、各リクエストでカフカのトピックを提供するユーザーのリクエストを処理することです。私は、KafkaプロバイダとしてBluemixに配備されたMessage Hubを使用します。リクエストには、ブローカーのURL、トピック名、ユーザー名、パスワード、およびAPIキーが渡されます。 BluemixのMessage HubはJAAS認証を必要とし、ログインモジュールに異なるLoginModule実装を提供します。 CallbackHandlersに基づくものもあれば、CredentialProvidersのものもあります。WebSphere Libertyでのjaasカスタム・ログイン・モジュールのクラス・ロード
com.ibm.messagehub.login.MultiUserLoginModule
に実装されているものを選択しました。そのモジュールでは私だけのようなカスタムの資格プロバイダを供給している必要があります
KafkaClient {
com.ibm.messagehub.login.MultiUserLoginModule required
credentialProvider="myApp.CustomCredentialProvider";
};
課題はクラスローダとどのようにCustomCredentialProviderは、実行時にMultiUserLoginModuleに渡された要求からユーザー名/パスワードを取得することができています。その設定を行うにはどのような設定を使用する必要がありますか?
詳細:WebSphere Liberty 8.5.5で動作するWebアプリケーションがあり、サードパーティのサービスで認証したいと考えています。このサードパーティサービスは、CredentialProviderを持つJAAS LoginModuleを実装します。私のWebアプリケーションは、資格情報を渡すためにCredentialProviderをCustomCredentialProviderで拡張しています。
私が理解できないことは、クラスの読み込みがどのように動作するはずかということです。私server.xml
が定義されています。
Webアプリケーション
<webApplication id="streaming-service" location="streaming-service.war" name="streaming-service"/>
にサードパーティのログインモジュールを
<jaasLoginModule className="com.ibm.messagehub.login.MultiUserLoginModule" controlFlag="REQUIRED" id="KafkaClient" libraryRef="messageHubLoginLib">
<options credentialProvider="myApp.CustomCredentialProvider" serviceName="kafka"/>
</jaasLoginModule>
サードパーティのログインモジュールを実装したライブラリ
<library id="messageHubLoginLib">
<fileset dir="${server.output.dir}" includes="messagehub.login-1.0.0.jar"/>
</library>
ログイン文脈
私は私のstreaming-service
ウェブアプリに実装
myApp.CustomCredentialProvider
を見つけるために、サードパーティJAASログイン・モジュールのための私の設定を変更しなければならないのはどのよう
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: myApp.CustomCredentialProvider
at com.ibm.messagehub.login.MultiUserLoginModule$MultiUserCallbackHandler.<clinit>(MultiUserLoginModule.java:80)
:
<jaasLoginContextEntry id="KafkaClient" loginModuleRef="KafkaClient" name="KafkaClient"/>
上記構成の結果は、私のCustomCredentialProviderのためにClassNotFoundExceptionです?
注:私はすでにストリーミングservice.jarを生成し、messageHubLoginLib
に直接追加しようとしました。これはClassNotFoundExceptionを解決しますが、CustomCredentialProviderクラスは実行中のWebアプリケーションのコンテキストの外部に完全にロードされていますが、依然として私の資格情報にアクセスできません。
私の場合は満足していません。私は単にサードパーティのカフカサービスで認証しようとしています。このサービスのLoginModuleは、messagehub.login-1.0.0.jarで利用できます。そのサービスの資格情報は、私のCustomCredentialProviderから取得する必要があります。そのクラスは私のストリーミングサービスWebアプリケーションに実装され、実行時にのみカフカの資格情報を取得します。私は今JAASを使って自分のWebアプリを認証する必要はありません。 –