Maison Java javaDidacticiel Explication détaillée de l'exemple de réalisation de la fonction d'enregistrement par e-mail en Java

Explication détaillée de l'exemple de réalisation de la fonction d'enregistrement par e-mail en Java

May 12, 2017 am 09:32 AM
boot java spring

Cet article présente principalement l'exemple de code de Spring Boot pour implémenter la fonction d'enregistrement par e-mail. L'éditeur pense que c'est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil au

Processus d'inscription

1 [Front-end] Les utilisateurs soumettent les informations d'inscription sur la Page d'inscription ;

2.[Backend] Vérifiez les paramètres soumis par l'utilisateur. S'il y a une erreur, il renverra directement le message d'erreur et s'exécutera s'il n'y a pas d'erreur ;

3.[Backend End] Générez aléatoirement un identifiant, utilisez l'identifiant comme clé, les informations utilisateur comme valeur, stockez-le dans redis et définissez la durée ;

4.[Backend ] Générez un lien d'activation et envoyez un e-mail à la boîte aux lettres de l'utilisateur via le système de messagerie

5.[Front-end] Le l'utilisateur clique sur "Confirmer l'enregistrement" dans l'image ci-dessus ;

6.[Back-end] Vérifiez si la valeur a expiré et vérifiez si l'adresse e-mail a été enregistrée. Sinon, enregistrez l'utilisateur. informations dans la base de données et invite indiquant que l'utilisateur s'est enregistré avec succès ;

Implémentation de la fonction (analyse inverse)

1. envoi cn.ictgu.tools.mail.MailService

package cn.ictgu.tools.mail;

import cn.ictgu.dao.model.User;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

/**
 * 邮件服务
 * Created by Silence on 2017/3/11.
 */
@Service
@Log4j
public class MailService {

 @Autowired
 private JavaMailSender mailSender;

 @Value("${spring.mail.username}")
 private String from;

 private static final String TITLE_SIGN_UP = "[邮件标题]";

 private static final String CONTENT = "[邮件内容]";

 public void userValidate(User user, String token){
 MimeMessage mailMessage = mailSender.createMimeMessage();
 try {
  MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "GBK");
  helper.setFrom(from);
  helper.setTo(user.getEmail());
  helper.setSubject(TITLE_SIGN_UP);
  String link = "http://www.ictgu.cn/validate/" + token;
  String message = String.format(CONTENT, user.getNickname(), link, link, user.getEmail());
  helper.setText(message, true);
  mailSender.send(mailMessage);
 } catch (MessagingException e) {
  log.error("发送邮件失败:User:" + JSONObject.toJSONString(user) + ", Token: " + token);
 }

 }
Copier après la connexion
Description : Pour envoyer un email, vous devez transmettre 2 paramètres utilisateur et token L'utilisateur est

enregistrement de l'utilisateur . informations, le jeton est un UUID aléatoire, il existe une clé correspondante dans redis et sa valeur est la chaîne json de l'utilisateur. (La règle clé est Fichier de configuration redis.prefix.signUp + UUID)

Problème de modèle d'e-mail :

La nature du contenu de l'e-mail Il s'agit d'une chaîne, le style est contrôlé par html+css. Lors du développement, concevez le modèle dans la boîte aux lettres, remplacez la variable

par %s, puis stockez la chaîne entière dans un endroit approprié. Lors de l'envoi de l'e-mail, utilisez la méthode String.format() pour remplacer %s par la valeur réelle afin de générer un e-mail que l'utilisateur final pourra voir. Par conséquent, il n'est pas nécessaire d'utiliser des modèles tiers. L'ajout de packages jar augmentera la complexité du système. Les mêmes fonctions peuvent être simplifiées autant que possible.

2. Comment générer un Token ? Veuillez consulter cn.ictgu.redis.RedisTokenManager

 public String getTokenOfSignUp(User user){
 String token = UUID.randomUUID().toString();
 String value = JSONObject.toJSONString(user);
 stringRedisTemplate.opsForValue().set(signUpPrefix + token, value);
 stringRedisTemplate.expire(signUpPrefix + token, 12, TimeUnit.HOURS);
 return token;
 }
Copier après la connexion
Description : UUID.randomUUID().toString() est une méthode fournie par javaJDK pour générer automatiquement des clés primaires. UUID (Univers

ally Unique Identifier) l'identifiant globalement unique fait référence à un numéro généré sur une machine, dont la validité est garantie pour toutes les machines dans le même temps et dans le même espace. La seule chose est le formulaire composé d'un nombre à seize chiffres. C'est une combinaison des parties suivantes : la date et l'heure actuelles (la première partie de l'UUID est liée à l'heure, si vous générez un UUID après quelques secondes, la première partie est différente et le reste est le même), clock Sequence, un numéro d'identification de machine IEEE unique au monde (s'il y a une carte réseau, il est obtenu à partir de la carte réseau, s'il n'y a pas de carte réseau, il est obtenu par d'autres moyens. Le seul défaut de l'UUID est qu'il est généré). la chaîne de résultat sera relativement longue.

3. Une fois que vous avez le jeton, vous devez associer l'utilisateur et le jeton au niveau de la couche de service pour envoyer des e-mails. Jetez un œil à cn.ictgu.dao.service.UserService

<. 🎜>Explication : L'envoi d'e-mails consomme beaucoup de temps, utilisez le traitement asynchrone pour améliorer l'expérience utilisateur
 public boolean signUp(User user){
 String email = user.getEmail();
 if (existEmail(email)){
  log.error("用户注册,邮箱已注册:" + email);
  return false;
 }
 sendValidateEmail(user);
 return true;
 }

 @Async
 private void sendValidateEmail(User user){
 String token = tokenManager.getTokenOfSignUp(user);
 log.error("用户注册,准备发送邮件:User:" + JSONObject.toJSONString(user) + ", Token: " + token);
 mailService.userValidate(user, token);
 }

 private boolean existEmail(String email){
 return mapper.selectByEmail(email) != null;
 }
Copier après la connexion

4 L'utilisateur est simple

Explication : Cette couche effectue principalement la vérification de l'utilisateur. paramètres d'enregistrement
@RestController
public class UserApi {

 @Autowired
 private UserService userService;

 @RequestMapping(value = "/sign-up", method = RequestMethod.POST)
 public SimpleResponse signUp(HttpServletRequest request){
 User user = createUser(request);
 SimpleResponse response = checkSignUpRequest(user);
 if (response.getCode() == 100){
  if (!userService.signUp(user)){
  response.setCode(200);
  response.setMessage("此邮箱已注册,请勿重复注册!");
  return response;
  }else {
  response.setMessage("注册激活邮件已发送至您邮箱,请在12小时内激活完成注册!");
  return response;
  }
 }
 return response;
 }

 private SimpleResponse checkSignUpRequest(User user){
 SimpleResponse response = new SimpleResponse();
 String email = user.getEmail();
 if (!CheckUtils.checkEmail(email)){
  response.setCode(200);
  response.setMessage("邮箱格式不合法");
  return response;
 }
 String password = user.getPassword();
 if (!CheckUtils.checkPassword(password)){
  response.setCode(200);
  response.setMessage("密码长度必须为8-16位,且必须包含数字和字母");
  return response;
 }
 String nickname = user.getNickname();
 if (!CheckUtils.checkNickname(nickname)){
  response.setCode(200);
  response.setMessage("昵称长度不合法");
  return response;
 }
 response.setCode(100);
 return response;
 }

}
Copier après la connexion

Rendu

Révision

En regardant de bas en haut, de inscription de l'utilisateur à l'e-mail L'envoi est implémenté. La plupart du code est utilisé pour la vérification des paramètres, car le

comportement

de l'utilisateur n'est pas digne de confiance. Pour construire un système backend sûr, il est nécessaire de le faire. vérifier sans angles morts. . . . [Recommandations associées]

1.

Tutoriel vidéo gratuit Java


Manuel en ligne YMP

3.

Tutoriel vidéo JAVA pour débutant

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

See all articles