2010-03-31 17 views
2

我已經成功實現了基於表單的身份驗證,現在我想從servlet中獲取用於在javamail中初始化會話對象的用戶名和密碼。我怎樣才能做到這一點?我可以使用方法request.getRemoteUser()獲取登錄用戶名,但我不知道如何獲取密碼。如何在servlets中獲取登錄密碼

如果我創建像任何會話對象:

authentication = new PasswordAuthentication(user,password); 
Properties props = new Properties(); 
props.put("mail.host", "localhost"); 
props.put("mail.debug",true); 
props.put("mail.store.protocol", "pop3"); 
props.put("mail.transport.protocol", "smtp"); 
Session session = Session.getInstance(props, this); 

那麼我怎樣才能根據特定的用戶名和密碼,從郵件服務器的郵件收件箱,如果我不通過從servlet來的PasswordAuthentication對象的任何密碼?

回答

3

Java EE/Servlet API不允許這樣做。您需要通過與容器相同的用戶密碼來源獲取密碼,或者需要將用戶密碼源進行外部化,以便容器和代碼都可以使用它,例如數據庫。使用「Realm」關鍵字檢查有問題的容器的文檔。由於您似乎使用Tomcat(基於您的問題歷史記錄),因此here是Tomcat的一個有針對性的示例,例如結帳時請輸入JDBCRealm

0

您可以在登錄表單的提交按鈕上放置一個「onClick」javascript處理程序,對存儲密碼的servlet執行AJAX調用。然而,它違背了安全框架。
更好的主意是擁有一個「安全」的密碼錢包功能,受J2EE認證保護。該功能將從數據庫或LDAP中檢索您的電子郵件密碼。當然,在這種情況下,數據庫應該以明文形式或混淆格式存儲您的密碼。
更好的辦法是爲servlet和電子郵件服務器使用外部認證器(單點登錄),但只有在他們都支持的認證提供者的情況下才可能。