我正在使用HTTP基本身份驗證與Java。如何從HTTP基本身份驗證獲取密碼
我的servlet發送JMS消息,但我需要提供用戶名和密碼,以驗證自己在創建連接:
javax.jms.ConnectionFactory.createConnection(String username, String password)
我可以檢索HttpServletRequest.getUserPrincipal用戶名()。但似乎沒有辦法檢索密碼。我該如何解決這個問題?
我正在使用HTTP基本身份驗證與Java。如何從HTTP基本身份驗證獲取密碼
我的servlet發送JMS消息,但我需要提供用戶名和密碼,以驗證自己在創建連接:
javax.jms.ConnectionFactory.createConnection(String username, String password)
我可以檢索HttpServletRequest.getUserPrincipal用戶名()。但似乎沒有辦法檢索密碼。我該如何解決這個問題?
您提到的密碼與登錄時用戶提供的密碼大不相同。雖然用例不清楚,但似乎您正嘗試使用外部用戶提供的用戶名/密碼來創建到JMS Connection Factory的連接。這對我來說聽起來並不安全。您應該只使用一個憑證連接到需要保護的ConnectionFactory(將其視爲數據庫連接)。最好是使用JNDI來查找ConnectionFactory並繞過用戶名/密碼管理的東西。
但是,如果你必須使用該技術,可以使用下面的代碼block.I是從Gitblit項目複製它,因爲它是在我的日食
使用Java8的Base64類開放:
final String authorization = httpRequest.getHeader("Authorization");
if (authorization != null && authorization.startsWith("Basic")) {
// Authorization: Basic base64credentials
String base64Credentials = authorization.substring("Basic".length()).trim();
String credentials = new String(Base64.getDecoder().decode(base64Credentials),
Charset.forName("UTF-8"));
// credentials = username:password
final String[] values = credentials.split(":",2);
用戶名和密碼最初是在HTTP Authorization
標題(base64編碼)中發送的,因此您可以使用它;但是如果用戶使用cookie維護會話,則他們不一定每次都會發送該頭文件。
你是對的體系結構。我已經放棄了這種方法,並採用了無證書的javax.jms.ConnectionFactory.createConnection()方法。 –
謝謝。它的工作,但有一個調整。但是你不能稱'Base64'爲靜態類。我做了: Base64 b = new Base64(); \t \t \t String credentials = new String(b.decode(base64Credentials),Charset.forName(「UTF-8」)); – iankits
@iankits Java 8語義略有不同。 –