2014-01-28 3 views
0

Я работаю над веб-приложением, основанным на весне, и когда пользователь вводит свой адрес электронной почты и пароль для регистрации Я хочу проверить их и отправить ему электронное письмо. Я использовал java mail api и настроил gmail smtp правильно.JavaMail - аутентификация по электронной почте для регистрации пользователя

Вот мой класс контроллера регистров.

@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 являются входящими параметрами запроса. как я могу проверить их? Если проверка прошла успешно, пользовательская_поточка может быть установлена ​​на message.setRecipients(...)

+2

Плавное перемещение с размытием пароля, все могут видеть изменения, поэтому вам лучше изменить его, если это ваш фактический пароль. –

ответ

1

Весна действительно обеспечивает механизм для проверки ваших моделей, как показано на рисунке here. Лично я бы рекомендовал вам следовать этим рекомендациям, чтобы ваше приложение полностью использовало функции, предлагаемые Spring.

Это, как говорится, самые основные формы проверки для имен пользователей - это убедиться, что имя пользователя еще не указано в вашей базе данных, а в некоторых случаях некоторые специальные символы могут не разрешаться.

Для паролей, с другой стороны, обычно существуют ограничения на длину, например, не менее 5 символов. В определенных ситуациях вы также можете принудительно использовать буквы разных корпусов, цифр и других специальных символов. В этих случаях регулярные выражения могут быть полезны. (Примечание: Для этого случая не рекомендуется создавать одно регулярное выражение, которое будет пытаться сопоставить все).

В совершенно ином примечании не забудьте сохранить ваши пароли как значения хэша, а затем, когда пользователь входит в систему, вы сравниваете значение хэша пароля, введенного пользователем с хешем, который вы уже в вашей БД.

+1

Обратите внимание, что просто сравнение голых хэшей уже не так «безопасно» в течение достаточного количества лет, вы хотите сгенерировать соль, которую вы храните в сеансе, и добавить ее к паролю после хэширования, а затем снова использовать его прежде чем отправлять его по сети. –

+0

@CeilingGecko: Я согласен с вами. Я не хотел подробно разбираться, так как хэширование было вне сферы, задающей этот вопрос. – npinti

+0

Не беспокойтесь, не стремился к тому, чтобы лично вы лично хотели просто добавить небольшую заметку для заядлых читателей о будущем. –

1

Знание адреса электронной почты пользователя не поможет вам, если вы не знаете, какой сервер использует пользователь. Есть способы понять это во многих случаях, но у вас может не быть доступа к этому серверу, даже если вы можете понять это. Единственная причина, по которой вы запрашиваете пароль, - это то, что вы хотите войти на сервер электронной почты пользователя, как если бы вы были этим пользователем. Надейтесь, что пользователи вам доверяют!

Если вы действительно хотите знать, что адрес электронной почты пользователя действителен, чтобы вы могли отправлять электронную почту этому пользователю, единственный реальный способ узнать, отправить сообщение на адрес и попросить пользователя что-то сделать (например, посетить URL-адрес вашего сервера), если сообщение получено.

Дополнительную информацию вы найдете в JavaMail FAQ.

Смежные вопросы