UPDATE:下面的問題的一些背景。我的目標是爲每個請求提供卡夫卡主題的用戶處理請求。我使用部署在Bluemix上的Message Hub作爲Kafka提供程序。這些請求將傳遞代理URL,主題名稱,用戶名,密碼和API密鑰。 Bluemix上的消息中心需要JAAS身份驗證,並提供具有不同LoginModule實現的登錄模塊。有些基於CallbackHandlers,其他基於CredentialProviders。類加載的JAAS自定義登錄模塊在WebSphere自由
我挑中com.ibm.messagehub.login.MultiUserLoginModule
實施的一個。有了這個模塊,我應該只需要提供自定義憑據提供這樣的:
KafkaClient {
com.ibm.messagehub.login.MultiUserLoginModule required
credentialProvider="myApp.CustomCredentialProvider";
};
的挑戰是在類加載器和如何CustomCredentialProvider可以從傳遞到MultiUserLoginModule在運行時請求的用戶名/密碼。我必須使用什麼配置才能使其工作?
細節:我在WebSphere 8.5.5自由運行的Web應用程序,並希望與第三方服務進行身份驗證。該第三方服務使用CredentialProvider實現JAAS LoginModule。我的Web應用程序使用CustomCredentialProvider擴展了CredentialProvider以傳遞憑證。
我不明白的是類加載是如何工作的。我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>
登錄圖書館背景
<jaasLoginContextEntry id="KafkaClient" loginModuleRef="KafkaClient" name="KafkaClient"/>
上述配置的結果是我CustomCredentialProvider一個ClassNotFoundException:
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: myApp.CustomCredentialProvider
at com.ibm.messagehub.login.MultiUserLoginModule$MultiUserCallbackHandler.<clinit>(MultiUserLoginModule.java:80)
如何做我必須改變我的配置爲第三方JAAS登錄模塊找到myApp.CustomCredentialProvider
我streaming-service
web應用程序中實現?
注:我已經嘗試過,產生以流式service.jar中,並直接將它添加到messageHubLoginLib
。這解決了ClassNotFoundException,但CustomCredentialProvider類完全在我運行的Web應用程序的上下文之外加載,並且仍然不允許我訪問我的憑據。
你說「的CustomCredentialProvider類應該是登錄模塊之間獨立和網絡應用程序「,但這並不滿足我的情況。我只是試圖與第三方Kafka服務進行身份驗證。該服務的LoginModule可用於messagehub.login-1.0.0.jar。該服務的憑據應來自我的CustomCredentialProvider。該類在我的流式服務Web應用程序中實現,並且只在運行時獲取Kafka憑據。我現在不需要使用JAAS來認證我自己的網絡應用程序。 –