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); } }
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 :
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; }
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 utilisateurpublic 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; }
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; } }
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
comportementde 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 JavaManuel en ligne YMPTutoriel vidéo JAVA pour débutantCe 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!