Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaMail-用于用户注册的电子邮件身份验证_Java_Spring_Smtp_Gmail_Jakarta Mail - Fatal编程技术网

JavaMail-用于用户注册的电子邮件身份验证

JavaMail-用于用户注册的电子邮件身份验证,java,spring,smtp,gmail,jakarta-mail,Java,Spring,Smtp,Gmail,Jakarta Mail,我正在开发一个基于spring的web应用程序,当用户输入他的电子邮件和密码进行注册时,我想验证它们并向他发送电子邮件。我使用了java mailapi并正确设置了gmailsmtp 这是我的注册控制器类 @RequestMapping(value = "/globalshop/register", method = RequestMethod.GET) public final ModelAndView registerModel( HttpServle

我正在开发一个基于spring的web应用程序,当用户输入他的电子邮件和密码进行注册时,我想验证它们并向他发送电子邮件。我使用了java mailapi并正确设置了gmailsmtp

这是我的注册控制器类

    @RequestMapping(value = "/globalshop/register", method = RequestMethod.GET)
    public final ModelAndView registerModel(
            HttpServletRequest request, HttpServletResponse response)
    {
        final String user_email = request.getParameter("user_email");
        final String user_password = request.getParameter("user_password"); 

        Properties email_properties = new Properties();

        email_properties.put("mail.smtp.auth", "true");
        email_properties.put("mail.smtp.starttls.enable", "true");
        email_properties.put("mail.smtp.host", "smtp.gmail.com");       
        email_properties.put("mail.smtp.port", "587");

        final String siteEmail = "**************@gmail.com";
        final String siteEmailPassword = "*************";

        Session session= Session.getInstance(email_properties, new Authenticator() {
            protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
                return new javax.mail.PasswordAuthentication(siteEmail, siteEmailPassword);

            }
        });


        try {
            Message message = new MimeMessage(session);

            message.setFrom(new InternetAddress(siteEmail));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(user_email));
            message.setSubject("Testing Subject");
            message.setText("Dear User,"+ "\n\n You have been successfully registerd with the gift corner!");

            Transport.send(message);
            System.out.println("Done");

        } catch (AddressException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        registerSucessView = new ModelAndView("test_register_succes");      
        registerSucessView.addObject("welcome", "welcome user");


        return registerSucessView;
    }

}

user\u-email
user\u-password
是传入的请求参数。如何验证它们?如果验证成功,用户\u可以将电子邮件设置为
消息。setRecipients(…)

Spring提供了验证模型的机制,如图所示。就个人而言,我建议您遵循这些指导原则,以便您的应用程序充分利用Spring提供的功能

也就是说,用户名验证的最基本形式是确保用户名不在数据库中,在某些情况下,可能不允许使用某些特殊字符

另一方面,对于密码,通常有一些长度限制,例如至少5个字符。在某些情况下,还可以强制使用不同大小写的字母、数字和其他特殊符号。在这些情况下,正则表达式可能会有所帮助。(注意:对于这种情况,不建议构建一个试图匹配所有内容的正则表达式)


另一方面,不要忘记将密码存储为散列值,然后,当用户登录时,您可以将用户输入的密码哈希值与数据库中已有的哈希值进行比较。

如果您不知道用户使用的服务器,了解用户的电子邮件地址对您没有帮助。在许多情况下,有很多方法可以解决这个问题,但即使您能够解决,您也可能无法访问该服务器。要求输入密码的唯一原因是,您希望登录到用户的电子邮件服务器,就像您是该用户一样。希望用户信任您

如果您真的只想知道用户的电子邮件地址是否有效,以便您可以向该用户发送电子邮件,那么唯一真正知道的方法是向该地址发送消息,并在收到消息时要求用户做一些事情(例如,访问服务器上的URL)


您将在.

平滑移动和密码模糊中找到更多信息,但每个人都可以看到编辑内容,因此如果它是您的实际密码,您最好将其更改。请注意,在很长一段时间内,仅比较裸哈希值并不是“安全”的,您希望生成一些存储在会话中的salt,并在散列后将其添加到密码中,然后在通过网络发送之前再次散列。@CeilingGecko:我同意您的看法。我不想钻研太多细节,因为哈希超出了提出这个问题的范围。不用担心,这并不是针对你个人本身,只是想为未来狂热的读者补充一点。