【问题标题】:How to validate a email and password using Java Mail API?如何使用 Java Mail API 验证电子邮件和密码?
【发布时间】:2012-10-03 19:53:28
【问题描述】:

我正在使用 Java 邮件 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帐户。

【问题讨论】:

标签: java api email passwords


【解决方案1】:

在 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

【讨论】:

  • 正则表达式如何检查用户名和密码是否正确?我需要验证以便帐户和密码能够发送电子邮件。
  • 是的,我在最初的回答之后意识到这一点,并如图所示更新了它。这当然不是供客户使用的真实程序。我强烈推荐 Spring Security。
【解决方案2】:

要验证电子邮件地址,您可以参考此链接

http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/

验证密码:您只需要从某些数据库或其他安全框架中检索存储的用户密码,并根据用户所做的输入进行验证。

【讨论】:

    【解决方案3】:

    这是一个相当大的话题。

    身份验证、授权和验证是三个不同的东西(但非常相关)。

    如果您是初学者,并且您只是尝试使用硬编码凭据进行一些模拟身份验证,您可以通过以下方式改进您的代码:

    public class Authenticator {
    
    public boolean authenticateWithCredentials(String email, String password) {
    
        boolean areValidCredentials = false;
    
        //Validate credentials here with database or hardcoded
        if(email.equals("my_email@emailprovider.com") && password.equals("mypassword")) {
            areValidCredentials = true;
        }
    
        return areValidCredentials;
    }
    

    }

    如果你打算只使用这个类的一个实例,你可以使用单例模式:

    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("my_email@emailprovider.com") && password.equals("mypassword")) {
            areValidCredentials = true;
        }
    
        return areValidCredentials;
    }
    

    }

    【讨论】:

    • 关于设计模式:何时使用单例?:stackoverflow.com/questions/228164/…
    • 我同意使用 Singleton 的理由很少,而且 99% 这不是使用它的好理由。因此,如果您只是在学习面向对象编程,请按照您从未听说过 Singleton 的方式去做! :)
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 2020-10-19
    • 2021-11-21
    • 2021-10-13
    • 2018-12-30
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多