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 @@