diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/event/OnRegistrationCompleteEvent.java b/spring-security-login-and-registration/src/main/java/org/baeldung/event/OnRegistrationCompleteEvent.java index 06c3627b50..f731c23fb1 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/event/OnRegistrationCompleteEvent.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/event/OnRegistrationCompleteEvent.java @@ -3,7 +3,9 @@ package org.baeldung.event; import java.util.Locale; import org.baeldung.persistence.model.User; +import org.baeldung.web.controller.RegistrationController; import org.springframework.context.ApplicationEvent; +import org.springframework.web.context.request.WebRequest; @SuppressWarnings("serial") public class OnRegistrationCompleteEvent extends ApplicationEvent { @@ -30,5 +32,4 @@ public class OnRegistrationCompleteEvent extends ApplicationEvent { public User getUser() { return user; } - } diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/event/listener/RegistrationListener.java b/spring-security-login-and-registration/src/main/java/org/baeldung/event/listener/RegistrationListener.java index b391b6d583..068a05ddf3 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/event/listener/RegistrationListener.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/event/listener/RegistrationListener.java @@ -1,12 +1,16 @@ package org.baeldung.event.listener; import java.util.UUID; + +import javax.mail.AuthenticationFailedException; + import org.baeldung.event.OnRegistrationCompleteEvent; import org.baeldung.persistence.model.User; import org.baeldung.persistence.service.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.MessageSource; +import org.springframework.mail.MailAuthenticationException; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java index ca81b82c79..ad5c4b27d7 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java @@ -32,10 +32,18 @@ public class User { @Column(name = "enabled") private boolean enabled; + + @Column(name = "token_expired") + private boolean tokenExpired; @OneToOne(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL) private Role role; - + + public User() { + super(); + this.enabled = false; + this.tokenExpired = false; + } public Long getId() { return id; } @@ -91,6 +99,15 @@ public class User { public void setEnabled(boolean enabled) { this.enabled = enabled; } + + public boolean isTokenExpired() { + return tokenExpired; + } + + public void setTokenExpired(boolean expired) { + this.tokenExpired = expired; + } + @Override public int hashCode() { 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 45b8c79cb7..4059dee88d 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 @@ -27,7 +27,7 @@ public class VerificationToken { private String token; @OneToOne(targetEntity = User.class, fetch = FetchType.EAGER) - @JoinColumn(name = "user_id") + @JoinColumn(nullable = false, name = "user_id") private User user; @Column(name = "expiry_date") diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java index 6083adebcd..f1896ab3d7 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -24,15 +24,15 @@ public class MyUserDetailsService implements UserDetailsService { private final Logger LOGGER = LoggerFactory.getLogger(getClass()); + @Autowired private UserRepository userRepository; @Autowired private IUserService service; @Autowired private MessageSource messages; - @Autowired - public MyUserDetailsService(UserRepository repository) { - this.userRepository = repository; + public MyUserDetailsService() { + } public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { @@ -48,8 +48,11 @@ public class MyUserDetailsService implements UserDetailsService { return new org.springframework.security.core.userdetails.User(" ", " ", enabled, true, true, true, getAuthorities(new Integer(1))); } if (!user.isEnabled()) { + enabled = false; + return new org.springframework.security.core.userdetails.User(" ", " ", enabled, true, true, true, getAuthorities(new Integer(1))); + } + if (user.isTokenExpired()) { accountNonExpired = false; - service.deleteUser(user); return new org.springframework.security.core.userdetails.User(" ", " ", enabled, accountNonExpired, true, true, getAuthorities(new Integer(1))); } return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword().toLowerCase(), enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, getAuthorities(user.getRole().getRole())); diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java index 35f799d770..5f1e79f023 100644 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java +++ b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java @@ -41,6 +41,7 @@ public class MvcConfig extends WebMvcConfigurerAdapter { registry.addViewController("/expiredAccount.html"); registry.addViewController("/regitrationConfirm.html"); registry.addViewController("/badUser.html"); + registry.addViewController("/emailError.html"); registry.addViewController("/home.html"); registry.addViewController("/invalidSession.html"); registry.addViewController("/console.html"); 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 6dc79de0ee..3fee2bb453 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 @@ -29,6 +29,8 @@ import org.springframework.web.servlet.ModelAndView; public class RegistrationController { private final Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @Autowired private IUserService service; @Autowired @@ -40,9 +42,8 @@ public class RegistrationController { @Autowired private ApplicationEventPublisher eventPublisher; - @Autowired - public RegistrationController(IUserService service) { - this.service = service; + public RegistrationController() { + } @RequestMapping(value = "/user/registration", method = RequestMethod.GET) @@ -59,7 +60,6 @@ public class RegistrationController { if (verificationToken == null) { model.addAttribute("message", messages.getMessage("auth.message.invalidToken", null, request.getLocale())); return "redirect:/badUser.html?lang=" + request.getLocale().getLanguage(); - } User user = verificationToken.getUser(); Calendar cal = Calendar.getInstance(); @@ -68,10 +68,9 @@ public class RegistrationController { return "redirect:/badUser.html?lang=" + request.getLocale().getLanguage(); } if ((verificationToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) { - user.setEnabled(false); - } else { - user.setEnabled(true); + user.setTokenExpired(true); } + user.setEnabled(true); service.saveRegisteredUser(user); return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); } @@ -88,7 +87,11 @@ public class RegistrationController { if (registered == null) { result.rejectValue("email", "message.regError"); } - eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl)); + try { + eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl)); + } catch (Exception me) { + return new ModelAndView("emailError", "user", accountDto); + } return new ModelAndView("successRegister", "user", accountDto); } diff --git a/spring-security-login-and-registration/src/main/resources/application.properties b/spring-security-login-and-registration/src/main/resources/application.properties index 4471b61a49..4948e3ebc4 100644 --- a/spring-security-login-and-registration/src/main/resources/application.properties +++ b/spring-security-login-and-registration/src/main/resources/application.properties @@ -8,11 +8,10 @@ init-db=false hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=false hibernate.hbm2ddl.auto=create-drop - ################### JavaMail Configuration ########################## smtp.host=smtp.gmail.com smtp.port=465 smtp.protocol=smtps -smtp.username=xxx777@gmail.com +smtp.username=xxx@gmail.com smtp.password= -support.email=xxx777@gmail.com \ No newline at end of file +support.email=xxx@gmail.com \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/resources/messages_en.properties b/spring-security-login-and-registration/src/main/resources/messages_en.properties index 16a7935f33..1a66bbc0f4 100644 --- a/spring-security-login-and-registration/src/main/resources/messages_en.properties +++ b/spring-security-login-and-registration/src/main/resources/messages_en.properties @@ -10,11 +10,12 @@ message.regError=An account for that username/email already exists. Please enter message.lastName=Last name is required message.firstName=First name required message.badEmail=Invalid email address +message.email.config.error=Error in java mail configuration token.message=Your token is: -auth.message.disabled=Your account is disabled please check your mail an click on the link to login. +auth.message.disabled=Your account is disabled please check your mail and click on the confirmation link auth.message.expired=Your registration token has expired. Please register again. auth.message.invalidUser=This username is invalid, or does not exist. -auth.message.invalidToken=Invalid account confirmation token. The confirmation link is not valid. +auth.message.invalidToken=Invalid account confirmation token. label.user.email=Email: label.user.firstName=First name: label.user.lastName=Last name: diff --git a/spring-security-login-and-registration/src/main/resources/messages_es_ES.properties b/spring-security-login-and-registration/src/main/resources/messages_es_ES.properties index b7e77cac4d..a22263b9ba 100644 --- a/spring-security-login-and-registration/src/main/resources/messages_es_ES.properties +++ b/spring-security-login-and-registration/src/main/resources/messages_es_ES.properties @@ -10,11 +10,12 @@ message.regError=Ya existe una cuenta con ese nombre de usuario. Ingrese un nomb message.lastName=Por favor ingrese su apellido message.firstName=Por favor ingrese su nombre message.badEmail=Direccion de correo no es valida +message.email.config.error=Error en configuracion de java mail token.message=Su token es: auth.message.disabled=Su cuenta no esta habilitada. Hemos enviado a su correo un link para habilitar su cuenta. auth.message.expired=Su ficha de registro ha caducado, por favor registrese de nuevo. auth.message.invalidUser=Este nombre de usuario es invalido o no existe. -auth.message.invalidToken=Codigo de confirmacion incorrecto.El enlace de confirmacion no es valido. +auth.message.invalidToken=Codigo de confirmacion incorrecto. label.user.email=Correo Electronico: label.user.firstName=Nombre: label.user.lastName=Apellido: diff --git a/spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml b/spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml index 5479d76946..d6abce8889 100644 --- a/spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml +++ b/spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml @@ -15,6 +15,8 @@ + + diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/admin.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/admin.jsp index 574f84453e..7456f2ebae 100644 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/admin.jsp +++ b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/admin.jsp @@ -6,6 +6,7 @@ " rel="stylesheet"> +<spring:message code="label.pages.home.title"></spring:message>
diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/emailError.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/emailError.jsp new file mode 100644 index 0000000000..ca94dbdfb0 --- /dev/null +++ b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/emailError.jsp @@ -0,0 +1,19 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> + + +" rel="stylesheet"> +<spring:message code="label.pages.home.title"></spring:message> + + +
+
+

+ +

+ +
+
+ + + diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/expiredAccount.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/expiredAccount.jsp index d96aff3e40..a8f732c312 100644 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/expiredAccount.jsp +++ b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/expiredAccount.jsp @@ -9,7 +9,7 @@ " rel="stylesheet"> - Expired + <spring:message code="label.pages.home.title"></spring:message>

diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/homepage.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/homepage.jsp index 59a20d7fa3..2d2942b44e 100644 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/homepage.jsp +++ b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/homepage.jsp @@ -6,6 +6,7 @@ " rel="stylesheet"> +<spring:message code="label.pages.home.title"></spring:message> 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 12f03edaed..7ffa78c777 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 @@ -33,15 +33,7 @@ " rel="stylesheet"> - +<spring:message code="label.pages.home.title"></spring:message>