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来认证我自己的网络应用程序。 –