平面文件JMS身份驗證很容易在Glassfish上設置(請參閱http://docs.sun.com/app/docs/doc/821-0027/aeofg?a=view)。Glassfish JMS(平面文件)身份驗證
問題是客戶端部分。我正在編寫一個獨立的Java客戶端,通過JNDI訪問我的JMS資源(ConnectionFactory
和Destination
)。
如何從該客戶端向JMS傳遞用戶名和密碼?
我已經試過幾件事情,如:
1)將這些憑證中的InitialContext
context.addToEnvironment(InitialContext.SECURITY_PRINCIPAL, "username");
context.addToEnvironment(InitialContext.SECURITY_CREDENTIALS, "password");
2)連接工廠
connectionFactory.createConnection();
使用JMS的用戶名和密碼參數但是,這些方法都沒有工作。
當我運行該程序,我只是得到:
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)
因此,它會一直嘗試用「guest」用戶進行身份驗證。
對於此測試,我使用connection.NORMAL.deny.user=*
作爲權限規則(accesscontrol.properties
)。
有趣的部分是factore獲得連接,即使在此之前拋出異常:
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) */
希望有人知道答案。
很多感謝
問候,
迪內希