平面文件 JMS 身份验证很容易在 Glassfish 上设置(请参阅http://docs.sun.com/app/docs/doc/821-0027/aeofg?a=view)。
问题是客户端部分。我正在编写一个独立的 Java 客户端来通过 JNDI访问我的 JMS 资源(ConnectionFactory
和)。Destination
如何从该客户端向 JMS 传递用户名和密码?
我已经尝试了几件事,例如:
1) 在 InitialContext 中添加这些凭据
context.addToEnvironment(InitialContext.SECURITY_PRINCIPAL, "username");
context.addToEnvironment(InitialContext.SECURITY_CREDENTIALS, "password");
2)在连接工厂中使用JMS用户名和密码参数
connectionFactory.createConnection();
但是,这些方法都不起作用。
当我运行程序时,我得到:
com.sun.messaging.jms.JMSSecurityException: [C4084]: Échec de
l'authentification de l'utilisateur : user=guest, broker=localhost:7676(34576)
at com.sun.messaging.jmq.jmsclient.ProtocolHandler.authenticate
(ProtocolHandler.java:1084)
所以它一直在尝试与“来宾”用户进行身份验证。
对于此测试,我使用connection.NORMAL.deny.user=*
了权限规则 ( accesscontrol.properties
)。
有趣的是,甚至在获得连接因子之前就抛出了这个异常:
InitialContext context = new InitialContext();
ConnectionFactory connectionFactory =
(ConnectionFactory)context.lookup("jms/middleware/factory");
/* The exception is thrown here, so authentication MUST have happened
before already (i.e. NOT in the createConnection(username, password) method) */
希望有人知道答案。
提前谢谢了
问候,
迪内什