我正在使用Spring,Hibernate,MVC,Maven和Tomcat构建应用程序。 我完成了本教程中的所有操作:
https://stackabuse.com/spring-security-email-verification-registration/
您好!
要激活您的帐户,请点击下面的链接
http://localhost:8080/confirm-account?token=5e5aad4f-90c4-4f83-8f58-83b66d63659f
但是当我复制并粘贴该链接时(我不知道为什么我没有链接-我认为它现在不重要了),我收到了错误404。就像api没有此地址一样。
现在我向您展示我的控制器的注册情况并确认帐户
@PostMapping("/add")
public String addUser(@ModelAttribute @Valid User user, Model model, BindingResult bindingResult, HttpServletRequest request) throws MessagingException {
User user1 = userRepository.findByEmail(user.getEmail());
User user2 = userRepository.findByUsername(user.getUsername());
if (user1 != null) {
bindingResult.rejectValue("email", "error.email", "Jest juz taki email w bazie!");
return "register_user";
}
if (user2 != null) {
bindingResult.rejectValue("username", "username.error", "Ta nazwa jest w użyciu");
return "register_user";
} else if (bindingResult.hasErrors()) {
return "register_user";
} else {
userRepository.save(user);
ConfirmationToken confirmationToken = new ConfirmationToken(user);
confirmationTokenRepository.save(confirmationToken);
emailSender.sendMail(user.getEmail(),"Konto w serwisie","<b>Witaj " + " "+ user.getFirstName()+"!</b>" +"<br> Dokonałeś rejestracji!" +
"<br>Aby dokończyc proces musisz kliknąć w link który znajduje się poniżej:<br> "
+ "http://localhost:8080/confirm-account?token=" + confirmationToken.getConfirmationToken());
model.addAttribute("confirmationMessage", "Pomyślnie utworzyłeś konto!Potwierdzenie wysłane na adres" + user.getEmail());
return "success";
}
}
并确认
@RequestMapping(value="/confirm-account", method= {RequestMethod.GET, RequestMethod.POST})
public String confirmUserAccount(Model model, @RequestParam("token")String confirmationToken)
{
ConfirmationToken token = confirmationTokenRepository.findByConfirmationToken(confirmationToken);
if(token != null)
{
User user = userRepository.findByEmail(token.getUser().getEmail());
user.setEnabled(true);
userRepository.save(user);
return "accountVerified";
}
else
{
model.addAttribute("message", "The link is invalid or broken!");
return "error";
}
}
谢谢!
答案 0 :(得分:0)
我怀疑http://localhost:8080/confirm-account?token=5e5aad4f-90c4-4f83-8f58-83b66d63659f
是实际的URL。除非您的应用程序在您的应用程序服务器中被部署为ROOT。它可能应该类似于http://localhost:8080/<app-name-version>/confirm-account?token=5e5aad4f-90c4-4f83-8f58-83b66d63659f
。
我强烈建议您使用String
来简化生活,而不是使用UriComponentsBuilder
concat来构造URL。
类似这样的事情。
String url = UriComponentsBuilder.fromHttpRequest(request)
.path("/confirm-account");
.queryParam("token", confirmationToken.getConfirmationToken()).toUriString();
然后使用此url
将其添加到您的电子邮件文本中,而不是对其中的URL进行硬编码。
注意:,除了自己创建UriComponentsBuilder
之外,您还可以将其添加为请求处理方法的参数。