Je voulais réinitialiser le mot de passe dans le projet Spring Boot, mais c'est un mémorandum que j'ai essayé de voir si je pouvais envoyer le mot de passe initialisé par e-mail.
L'environnement est IDE:Eclipse ** Version: Java8, springframework.boot version 2.3.0 **
De plus, un serveur SMTP est nécessaire pour envoyer du courrier, mais il semble qu'il ne puisse pas être envoyé localement, donc cette fois j'utiliserai facilement le SMTP de Google.
construisez ce dont vous avez besoin pour construire gradle
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-mail'
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
//Commons pour la génération aléatoire de chaînes de mots de passe-Compiler lang3
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.10'
}
application.propeties
<!--Paramètres Gmailsmtp-->
spring.mail.host=smtp.gmail.com
spring.mail.port=587
<!--Paramètres SMTP locaux-->
<!-- spring.mail.host=localhost -->
<!-- spring.mail.port=25 -->
spring.mail.username=*****@*****
spring.mail.password=******
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Entrez l'adresse e-mail de l'expéditeur dans le nom d'utilisateur et le mot de passe du compte Google avec cette adresse e-mail dans le mot de passe. Comme mentionné dans le commentaire, ** Si vous êtes dans un environnement local, définissez host sur localhost et entrez le numéro de port par défaut **.
Créez un formulaire d'entrée qui spécifie la méthode de publication en html. Si vous entrez une adresse e-mail et appuyez sur le bouton d'envoi, un e-mail sera envoyé à cette adresse. (Comme ce n'est pas la ligne principale, elle est omise)
Controller
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
@Controller
@RequestMapping("passReset")
public class PassResetController {
@Autowired
private UserService userService;
@Autowired
private MailSender mailSender;
@GetMapping
public ModelAndView passResetPage(ModelAndView mav) {
return mav;
}
@PostMapping
public ModelAndView passResetSend(@RequestParam(name = "email") String email,
User user,
ModelAndView mav) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(email);
user = userService.findUserByEmail(email);
if (user == null) {
simpleMailMessage.setTo(email);
simpleMailMessage.setSubject("Notification de réinitialisation du mot de passe");
simpleMailMessage.setText("**Est un service\n\r\n\r" + email + "\n\r\n\r Ce compte n'existe pas");
this.mailSender.send(simpleMailMessage);
mav.setViewName("redirect:login");
return mav;
}
String password = RandomStringUtils.randomAscii(8);;
userService.accountEdit(user.getEmail(), password);
simpleMailMessage.setTo(email);
simpleMailMessage.setSubject("Notification de réinitialisation du mot de passe");
simpleMailMessage.setText("**Est un service\n\r\n\r" + email + "\n\r\n\r Vous avez réinitialisé le mot de passe de ce compte.\n\r\n\Réinitialiser le mot de passe:" + password + "\n\r\n\r Une fois connecté, veuillez réinitialiser vous-même le mot de passe.");
this.mailSender.send(simpleMailMessage);
mav.setViewName("redirect:login");
return mav;
}
}
Ce que vous faites avec la méthode de publication
Cela devient le flux de.
En fait, il serait préférable d'utiliser UUID au lieu de RandomStringUtils pour la sécurité, mais compte tenu de la gestion des symboles, etc., j'ai pensé que StringUtils serait plus facile, alors j'ai utilisé ceci. De plus, si vous avez configuré l'authentification en deux étapes avec votre compte Google, vous ne pourrez pas vous connecter à l'application, vous devez donc la désactiver à l'avance.
Et, comme ça, c'est une merde en termes de sécurité, mais je pense que j'ai réussi à saisir le flux. Je l'ai essayé sur un serveur SMTP local, mais j'ai pu vérifier le courrier envoyé au serveur de la même manière (bien que les paramètres soient légèrement différents), j'ai donc pensé qu'il s'agissait d'une plage réaliste dans l'environnement local. C'était.
Recommended Posts