diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/PasswordResetToken.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/PasswordResetToken.java index d955ff970c..cfff0135da 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/PasswordResetToken.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/PasswordResetToken.java @@ -1,6 +1,5 @@ package org.baeldung.persistence.model; -import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; @@ -74,7 +73,7 @@ public class PasswordResetToken { private Date calculateExpiryDate(int expiryTimeInMinutes) { Calendar cal = Calendar.getInstance(); - cal.setTime(new Timestamp(cal.getTime().getTime())); + cal.setTimeInMillis(new Date().getTime()); cal.add(Calendar.MINUTE, expiryTimeInMinutes); return new Date(cal.getTime().getTime()); } diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java index e5ffef9434..a25750d3d0 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java @@ -14,7 +14,7 @@ import javax.persistence.OneToOne; @Entity public class VerificationToken { - private static final int EXPIRATION = 2;// 60 * 24; + private static final int EXPIRATION = 60 * 24; @Id @GeneratedValue(strategy = GenerationType.AUTO) diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java index 72730aa23e..10e5753ccd 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java @@ -19,7 +19,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.MessageSource; -import org.springframework.http.MediaType; +import org.springframework.context.NoSuchMessageException; import org.springframework.mail.MailAuthenticationException; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; @@ -39,6 +39,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + @Controller public class RegistrationController { private final Logger LOGGER = LoggerFactory.getLogger(getClass()); @@ -140,15 +143,14 @@ public class RegistrationController { return "redirect:/login.html?lang=" + locale.getLanguage(); } - @RequestMapping(value = "/user/resendRegistrationToken2", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) - public @ResponseBody String resendRegistrationToken2(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) { + @RequestMapping(value = "/user/resendRegistrationToken2", method = RequestMethod.GET) + public @ResponseBody String resendRegistrationToken2(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) throws JsonProcessingException, NoSuchMessageException { final VerificationToken newToken = userService.generateNewVerificationToken(existingToken); final User user = userService.getUser(newToken.getToken()); final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user); - System.out.println(email.getText()); mailSender.send(email); - return messages.getMessage("message.resendToken", null, request.getLocale()); + return new ObjectMapper().writeValueAsString(messages.getMessage("message.resendToken", null, request.getLocale())); } @RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST) @@ -177,6 +179,22 @@ public class RegistrationController { return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); } + @RequestMapping(value = "/user/resetPassword2", method = RequestMethod.POST) + public @ResponseBody String resetPassword2(final HttpServletRequest request, final Model model, @RequestParam("email") final String userEmail) throws JsonProcessingException, NoSuchMessageException { + final User user = userService.findUserByEmail(userEmail); + if (user == null) { + return new ObjectMapper().writeValueAsString(messages.getMessage("message.userNotFound", null, request.getLocale())); + } + + final String token = UUID.randomUUID().toString(); + userService.createPasswordResetTokenForUser(user, token); + final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); + final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user); + mailSender.send(email); + + return new ObjectMapper().writeValueAsString(messages.getMessage("message.resetPassword", null, request.getLocale())); + } + @RequestMapping(value = "/user/changePassword", method = RequestMethod.GET) public String changePassword(final HttpServletRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) { final Locale locale = request.getLocale(); diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java index 2ef260c580..e77f6798b0 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java @@ -23,13 +23,13 @@ public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionH @ExceptionHandler({ MailAuthenticationException.class }) public @ResponseBody String handleMail(final RuntimeException ex, final WebRequest request) throws JsonProcessingException { logger.error("500 Status Code", ex); - return new ObjectMapper().writeValueAsString(ex.getClass().toString()); + return new ObjectMapper().writeValueAsString("MailError"); } @ExceptionHandler({ NullPointerException.class, IllegalArgumentException.class, IllegalStateException.class }) public @ResponseBody String handleInternal(final RuntimeException ex, final WebRequest request) throws JsonProcessingException { logger.error("500 Status Code", ex); - return new ObjectMapper().writeValueAsString(ex.getClass().toString()); + return new ObjectMapper().writeValueAsString("InternalError"); } } diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp index cc5d606ab2..d85a4ca371 100644 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp +++ b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp @@ -32,15 +32,15 @@ code="label.form.loginSignUp"> + \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/login.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/login.jsp index feed4754e9..21cb940524 100644 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/login.jsp +++ b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/login.jsp @@ -57,7 +57,7 @@ -
+
${param.message}