[英]JavaMail - Email Authentication for user registration
我正在开发一个基于Spring的网络应用程序,当用户输入他的电子邮件和密码进行注册时, 我想验证它们并向他发送电子邮件 。我使用了java mail api并正确设置了gmail smtp 。
这是我的注册控制器类。
@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_email
和user_password
是传入的请求参数。 我该如何验证它们 ? 如果验证成功,则user_email可以设置为message.setRecipients(...)
春天确实提供了一种机制来验证你的模型,如图所示这里 。 我个人建议您遵循这些准则,以便您的应用程序充分利用Spring提供的功能。
话虽这么说,用户名的最基本验证形式是确保用户名不在您的数据库中,在某些情况下,可能不允许某些特殊字符。
另一方面,对于密码,通常存在一些长度限制,例如至少5个字符。 在某些情况下,您还可以强制使用不同套管,数字和其他特殊符号的字母。 在这些情况下,正则表达式可能会有所帮助。 ( 注意:对于这种情况,不建议构建一个试图匹配所有内容的单一正则表达式)。
在一个完全不同的说明中,不要忘记将密码存储为哈希值,然后,当用户登录时,您将用户输入的密码的哈希值与您已经输入的哈希值进行比较。 D B。
如果您不知道用户使用的是哪台服务器,则了解用户的电子邮件地址对您没有帮助。 在许多情况下,有很多方法可以解决这个问题,但即使你能弄明白,也可能无法访问该服务器。 要求输入密码的唯一原因是因为您想要登录用户的电子邮件服务器,就像您是该用户一样。 希望用户信任你!
如果您真的只是想知道用户的电子邮件地址是有效的,以便您可以向该用户发送电子邮件,唯一真正的方法是向该地址发送消息并要求用户做某事(例如,访问如果收到消息,则说明服务器上的URL。
您可以在JavaMail FAQ中找到更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.