2012-10-12 128 views
1

我使用Java郵件API:如何使用Java Mail API驗證電子郵件和密碼?

PasswordAuthentication valid = new PasswordAuthentication(txtEmail.getText(), 
                 txtPassword.getText()); 

if (valid != null) { 
    lblInvalid.setText("Correct information!"); 
} else { 
    lblInvalid.setText("Invalid username or password!"); 
} 

我想要它做什麼,我希望用戶與他們的Gmail用戶名和密碼登錄。我想檢查該電子郵件用戶名和密碼是否是真正的Gmail登錄信息。如何檢查電子郵件和密碼是否是用戶Gmail帳戶。

+3

閱讀:[您應該瞭解的密碼安全性](http://crackstation.net/hashing-security.htm) – NullUserException

+0

您的程序應該如何知道正確的密碼是什麼? – Wyzard

回答

2

在Java中,做new Anything()將永遠不會返回null。

此外,該類似乎只是一個佔位符數據結構,由JDK的其他部分使用。它本質上不做驗證。

驗證電子郵件地址通常使用正則表達式,並保持簡單。如果這對你很重要,你應該向用戶發送一條確認消息來驗證他們的電子郵件地址。

使用正則表達式還可以驗證密碼的正確形式。

更新

你正試圖發出錯誤信息更仔細地觀察,它看起來像你想處理身份驗證自己。這裏有很多方法可以做到這一點,但一個非常簡單的只有樣機解決方案是這樣的:

// create a static mapping of user/passwords: 
private static Map<String, String> logins = new HashMap<String, String>(); 

然後在您的處理程序:

if (txtPassword.getText().equals(logins.get(txtEmail.getText()))) { 
    lblInvalid.setText("Correct information!"); 
} else { 
    lblInvalid.setText("Invalid username or password!"); 
} 

對於你打算在生產中我使用的東西強烈建議Spring Security

+0

正則表達式如何檢查用戶名和密碼是否正確?我需要驗證,以便帳戶和密碼能夠發送電子郵件。 –

+0

是的,我意識到我的初步答案後,如圖所示更新它。這當然不適合客戶使用的真實程序。我強烈推薦Spring Security。 –

0

這是一個很大的話題。

認證,授權和驗證是三件不同的事情(但非常相關)。

如果你是一個初學者,你只是想通過硬編碼憑證一些模擬驗證,你可以提高你的代碼有點像這樣的東西:

public class Authenticator { 

public boolean authenticateWithCredentials(String email, String password) { 

    boolean areValidCredentials = false; 

    //Validate credentials here with database or hardcoded 
    if(email.equals("[email protected]") && password.equals("mypassword")) { 
     areValidCredentials = true; 
    } 

    return areValidCredentials; 
} 

}

如果你是要使用這個類的只是一個例子,你可以使用Singleton模式:

public class Authenticator { 

//Singleton pattern 
private static Authenticator instance; 

public static Authenticator getInstance() { 

    if(instance == null) { 
     instance = new Authenticator(); 
    } 

    return instance; 
} 

private Authenticator() { 
    //Block creation of Authenticator instances 
} 

public boolean authenticateWithCredentials(String email, String password) { 

    boolean areValidCredentials = false; 

    //Validate credentials here with database or hardcoded 
    if(email.equals("[email protected]") && password.equals("mypassword")) { 
     areValidCredentials = true; 
    } 

    return areValidCredentials; 
} 

}

+0

關於設計模式:何時使用Singleton?:http://stackoverflow.com/questions/228164/on-design-patterns-when-to-use-the-singleton – zengr

+1

我同意使用Singleton的原因很少和99%,這不是一個很好的使用它的理由。 所以,如果你只是學習面向對象的編程做你從來沒有聽說過的單身! :) – Giorgio

相關問題