diff --git a/spring-security-login-and-registration/.classpath b/spring-security-login-and-registration/.classpath
index b645d7579b..26d621d156 100644
--- a/spring-security-login-and-registration/.classpath
+++ b/spring-security-login-and-registration/.classpath
@@ -28,5 +28,7 @@
+
+
diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/event/OnRegistrationComplete.java b/spring-security-login-and-registration/src/main/java/org/baeldung/event/OnRegistrationComplete.java
new file mode 100644
index 0000000000..de77c4f53c
--- /dev/null
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/event/OnRegistrationComplete.java
@@ -0,0 +1,19 @@
+package org.baeldung.event;
+
+import org.springframework.context.ApplicationEvent;
+
+@SuppressWarnings("serial")
+public class OnRegistrationComplete extends ApplicationEvent {
+
+ public final Registration registration;
+
+ public OnRegistrationComplete(Registration source) {
+ super(source);
+ this.registration=source;
+ }
+
+ public Registration getRegistration() {
+ return registration;
+ }
+
+}
diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/event/Registration.java b/spring-security-login-and-registration/src/main/java/org/baeldung/event/Registration.java
new file mode 100644
index 0000000000..1996d2f889
--- /dev/null
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/event/Registration.java
@@ -0,0 +1,57 @@
+package org.baeldung.event;
+
+import java.util.Locale;
+import org.baeldung.persistence.model.User;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationEventPublisherAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Registration implements ApplicationEventPublisherAware {
+
+ private ApplicationEventPublisher eventPublisher;
+
+ public String getAppUrl() {
+ return appUrl;
+ }
+
+ public Locale getLocale() {
+ return locale;
+ }
+
+ public void setAppUrl(String appUrl) {
+ this.appUrl = appUrl;
+ }
+
+ public void setLocale(Locale locale) {
+ this.locale = locale;
+ }
+
+ public void setUser(User user) {
+ this.user = user;
+ }
+
+ public User getUser() {
+ return user;
+ }
+
+ private String appUrl;
+ private Locale locale;
+ private User user;
+
+ public Registration() {
+ super();
+ }
+
+ public void deliver() {
+ this.eventPublisher.publishEvent(new OnRegistrationComplete(this));
+ }
+
+ @Override
+ public void setApplicationEventPublisher(
+ ApplicationEventPublisher applicationEventPublisher) {
+ this.eventPublisher = applicationEventPublisher;
+
+ }
+
+}
diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/event/service/RegistrationService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/event/service/RegistrationService.java
new file mode 100644
index 0000000000..c555948400
--- /dev/null
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/event/service/RegistrationService.java
@@ -0,0 +1,50 @@
+package org.baeldung.event.service;
+
+
+import java.util.UUID;
+import org.baeldung.event.OnRegistrationComplete;
+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.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RegistrationService implements
+ ApplicationListener {
+ @Autowired
+ private IUserService service;
+ @Autowired
+ private MessageSource messages;
+
+ @Autowired
+ private JavaMailSender mailSender;
+
+ @Override
+ public void onApplicationEvent(OnRegistrationComplete event) {
+ this.confirmRegistration(event);
+ }
+
+ private void confirmRegistration(OnRegistrationComplete event) {
+ User user = event.getRegistration().getUser();
+ String token = UUID.randomUUID().toString();
+ service.addVerificationToken(user, token);
+ String recipientAddress = user.getEmail();
+ String subject = "Registration Confirmation";
+ String confirmationUrl = event.getRegistration().getAppUrl()
+ + "/regitrationConfirm.html?token=" + token;
+ String message = messages.getMessage("message.regSucc", null, event
+ .getRegistration().getLocale());
+ SimpleMailMessage email = new SimpleMailMessage();
+ email.setTo(recipientAddress);
+ email.setSubject(subject);
+ email.setText(message + " \r\n" + "http://localhost:8080"
+ + confirmationUrl);
+ mailSender.send(email);
+
+ }
+
+}
diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java
index b3ae14feaf..a7120b2e81 100644
--- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java
@@ -2,12 +2,9 @@ package org.baeldung.persistence.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.baeldung.persistence.model.User;
-import org.baeldung.persistence.model.VerificationToken;
public interface UserRepository extends JpaRepository {
- public User findByEmail(String email);
- //NOV 5th
- // public User findByVerificationToken(VerificationToken token);
- //OCT 21
- public void delete(User user);
+ public User findByEmail(String email);
+
+ public void delete(User user);
}
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 c7245817da..f947f4b7c0 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
@@ -13,12 +13,12 @@ import javax.persistence.Table;
@Entity
@Table
public class User {
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private Long id;
- @Column(name="firstName")
- private String firstName;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
+ @Column(name = "firstName")
+ private String firstName;
@Column(name="lastName")
private String lastName;
@Column(name="email")
@@ -26,7 +26,6 @@ public class User {
@Column(name="password")
private String password;
- //EMAIL CONF ARTICLE
@OneToOne(mappedBy="user",
fetch = FetchType.EAGER,
cascade= CascadeType.ALL)
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 c3d07ff7b4..b73859e8a4 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
@@ -1,7 +1,6 @@
package org.baeldung.persistence.model;
import java.util.Calendar;
-import java.io.Serializable;
import java.sql.Date;
import java.sql.Timestamp;
import javax.persistence.Column;
@@ -14,13 +13,11 @@ import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
-@Entity(/*name = "verrification_token"*/)
-@Table(/*name = "verrification_token"*/)
-public class VerificationToken /*implements Serializable*/ {
+@Entity()
+@Table()
+public class VerificationToken {
- //private static final long serialVersionUID = 1L;
-
- private static final int EXPIRATION = 60 * 24/* 1 */;
+ 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/persistence/service/IUserService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java
index 9882e81426..84e610561e 100644
--- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java
@@ -1,15 +1,17 @@
package org.baeldung.persistence.service;
import org.baeldung.persistence.model.User;
-import org.baeldung.persistence.model.VerificationToken;
import org.baeldung.validation.service.EmailExistsException;
public interface IUserService {
public User registerNewUserAccount(UserDto accountDto) throws EmailExistsException;
- //OCT 21 EMAIL VERIFICATION
public User getRegisteredUser(String email);
+ public User getUser(String verificationToken);
+
public void verifyRegisteredUser(User user);
+
+ public void addVerificationToken(User user, String token);
}
diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserDto.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserDto.java
index baea817ddb..f6c4040113 100644
--- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserDto.java
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserDto.java
@@ -24,16 +24,7 @@ public class UserDto {
@NotNull
@NotEmpty
private String email;
- private String token;
-
- public String getToken() {
- return token;
- }
-
- public void setToken(String token) {
- this.token = token;
- }
-
+
public String getEmail() {
return email;
}
diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java
index e6f3cf9d73..c14f3ab6ba 100644
--- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java
@@ -3,6 +3,7 @@ package org.baeldung.persistence.service;
import javax.transaction.Transactional;
import org.baeldung.persistence.dao.UserRepository;
+import org.baeldung.persistence.dao.VerificationTokenRepository;
import org.baeldung.persistence.model.Role;
import org.baeldung.persistence.model.User;
import org.baeldung.persistence.model.VerificationToken;
@@ -12,49 +13,63 @@ import org.springframework.stereotype.Service;
@Service
public class UserService implements IUserService {
- @Autowired
- private UserRepository repository;
+ @Autowired
+ private UserRepository repository;
+ // NOV 6
+ @Autowired
+ private VerificationTokenRepository tokenRepository;
- @Transactional
- @Override
- public User registerNewUserAccount(UserDto accountDto) throws EmailExistsException {
- if (emailExist(accountDto.getEmail())) {
- throw new EmailExistsException("There is an account with that email adress: " + accountDto.getEmail());
- }
- User user = new User();
- user.setFirstName(accountDto.getFirstName());
- user.setLastName(accountDto.getLastName());
- user.setPassword(accountDto.getPassword());
- user.setEmail(accountDto.getEmail());
- // ROLE WILL ALWAYS BE USER. HARDCODING IT
- user.setRole(new Role(Integer.valueOf(1), user));
- //OCT 21 EMAIL VERIFICATION VERSION
- //MIGHT CHANGE HERE
- VerificationToken myToken = new VerificationToken(accountDto.getToken(),user);
- user.setVerificationToken(myToken);
- return repository.save(user);
- }
+ @Transactional
+ @Override
+ public User registerNewUserAccount(UserDto accountDto)
+ throws EmailExistsException {
+ if (emailExist(accountDto.getEmail())) {
+ throw new EmailExistsException(
+ "There is an account with that email adress: "
+ + accountDto.getEmail());
+ }
+ User user = new User();
+ user.setFirstName(accountDto.getFirstName());
+ user.setLastName(accountDto.getLastName());
+ user.setPassword(accountDto.getPassword());
+ user.setEmail(accountDto.getEmail());
+ user.setRole(new Role(Integer.valueOf(1), user));
+ return repository.save(user);
+ }
- private boolean emailExist(String email) {
- User user = repository.findByEmail(email);
- if (user != null) {
- return true;
- }
- return false;
- }
-
- //OCT 21 EMAIL VERIFICATION
- @Override
- public User getRegisteredUser(String email){
-
- User user = repository.findByEmail(email);
- return user;
-
- }
-
- @Transactional
- @Override
- public void verifyRegisteredUser(User user){
- repository.save(user);
- }
+ private boolean emailExist(String email) {
+ User user = repository.findByEmail(email);
+ if (user != null) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public User getRegisteredUser(String email) {
+
+ User user = repository.findByEmail(email);
+ return user;
+
+ }
+
+ @Override
+ public User getUser(String verificationToken) {
+ User user = tokenRepository.findByToken(verificationToken).getUser();
+ return user;
+ }
+
+ @Transactional
+ @Override
+ public void verifyRegisteredUser(User user) {
+ repository.save(user);
+ }
+
+ @Transactional
+ @Override
+ public void addVerificationToken(User user, String token) {
+ VerificationToken myToken = new VerificationToken(token, user);
+ user.setVerificationToken(myToken);
+ repository.save(user);
+ }
}
diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/AppConfig.java b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/AppConfig.java
index 90b15d3800..8179317c3d 100644
--- a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/AppConfig.java
+++ b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/AppConfig.java
@@ -13,31 +13,33 @@ import org.springframework.core.env.Environment;
import org.springframework.mail.javamail.JavaMailSenderImpl;
@Configuration
-@ComponentScan(basePackages = { "org.baeldung.persistence.service", "org.baeldung.persistence.dao" })
+@ComponentScan(basePackages = { "org.baeldung.event.service",
+ "org.baeldung.event", "org.baeldung.persistence.service",
+ "org.baeldung.persistence.dao" })
@Import({ MvcConfig.class, PersistenceJPAConfig.class, SecSecurityConfig.class })
@PropertySource("classpath:application.properties")
public class AppConfig {
@Autowired
private Environment env;
-
- @Bean
- public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
- return new PropertySourcesPlaceholderConfigurer();
- }
-
- //OCT 21
- @Bean
- public JavaMailSenderImpl javaMailSenderImpl() {
- JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl();
- mailSenderImpl.setHost(env.getProperty("smtp.host"));
- mailSenderImpl.setPort(env.getProperty("smtp.port", Integer.class));
- mailSenderImpl.setProtocol(env.getProperty("smtp.protocol"));
- mailSenderImpl.setUsername(env.getProperty("smtp.username"));
- mailSenderImpl.setPassword(env.getProperty("smtp.password"));
- Properties javaMailProps = new Properties();
- javaMailProps.put("mail.smtp.auth", true);
- javaMailProps.put("mail.smtp.starttls.enable", true);
- mailSenderImpl.setJavaMailProperties(javaMailProps);
- return mailSenderImpl;
- }
+
+ @Bean
+ public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
+ return new PropertySourcesPlaceholderConfigurer();
+ }
+
+ @Bean
+ public JavaMailSenderImpl javaMailSenderImpl() {
+ JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl();
+ mailSenderImpl.setHost(env.getProperty("smtp.host"));
+ mailSenderImpl.setPort(env.getProperty("smtp.port", Integer.class));
+ mailSenderImpl.setProtocol(env.getProperty("smtp.protocol"));
+ mailSenderImpl.setUsername(env.getProperty("smtp.username"));
+ mailSenderImpl.setPassword(env.getProperty("smtp.password"));
+ Properties javaMailProps = new Properties();
+ javaMailProps.put("mail.smtp.auth", true);
+ javaMailProps.put("mail.smtp.starttls.enable", true);
+ mailSenderImpl.setJavaMailProperties(javaMailProps);
+ return mailSenderImpl;
+ }
+
}
\ No newline at end of file
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 5411eae0dc..dd9e38a8de 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
@@ -1,10 +1,7 @@
package org.baeldung.web.controller;
-import java.util.Locale;
-import java.util.UUID;
-
import javax.validation.Valid;
-
+import org.baeldung.event.Registration;
import org.baeldung.persistence.model.User;
import org.baeldung.persistence.model.VerificationToken;
import org.baeldung.persistence.service.UserDto;
@@ -14,7 +11,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
-import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@@ -33,11 +29,11 @@ public class RegistrationController {
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
private IUserService service;
@Autowired
- // OCT 21
private MessageSource messages;
- // OCT 21
@Autowired
private JavaMailSender mailSender;
+ @Autowired
+ private Registration registration;
@Autowired
public RegistrationController(IUserService service) {
@@ -47,52 +43,43 @@ public class RegistrationController {
@RequestMapping(value = "/user/registration", method = RequestMethod.GET)
public String showRegistrationForm(WebRequest request, Model model) {
LOGGER.debug("Rendering registration page.");
- //Changed name to accountDto
UserDto accountDto = new UserDto();
model.addAttribute("user", accountDto);
return "registration";
}
- // OCT 21
- // FOR EMAIL ARTICLE
@RequestMapping(value = "/regitrationConfirm", method = RequestMethod.GET)
public String confirmRegistration(WebRequest request, Model model,
- @RequestParam("token") String token,
- @RequestParam("email") String email) {
- System.out.println(token);
- System.out.println(email);
- //NOV 5 get user by token
- User user = service.getRegisteredUser(email);
-
- if(user==null) {
- model.addAttribute("message",messages.getMessage("auth.message.invalidUser", null, request.getLocale()));
- //return "badUser";
- return "redirect:/badUser.html?lang="+request.getLocale().getLanguage();
+ @RequestParam("token") String token) {
+ User user = service.getUser(token);
+ if (user == null) {
+ model.addAttribute("message", messages.getMessage(
+ "auth.message.invalidUser", null, request.getLocale()));
+ return "redirect:/badUser.html?lang="
+ + request.getLocale().getLanguage();
}
-
+
VerificationToken verificationToken = user.getVerificationToken();
- if(!verificationToken.getToken().equals(token)) {
- model.addAttribute("message",messages.getMessage("auth.message.invalidToken", null, request.getLocale()));
- //return "badUser";
- return "redirect:/badUser.html?lang="+request.getLocale().getLanguage();
+ if (!verificationToken.getToken().equals(token)) {
+ model.addAttribute("message", messages.getMessage(
+ "auth.message.invalidToken", null, request.getLocale()));
+ return "redirect:/badUser.html?lang="
+ + request.getLocale().getLanguage();
}
user.getVerificationToken().setVerified(true);
service.verifyRegisteredUser(user);
- //return "login";
- return "redirect:/login.html?lang="+request.getLocale().getLanguage();
+ return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
}
@RequestMapping(value = "/user/registration", method = RequestMethod.POST)
public ModelAndView registerUserAccount(
@ModelAttribute("user") @Valid UserDto accountDto,
BindingResult result, WebRequest request, Errors errors) {
- //OCT 21
- LOGGER.debug("Registering user account with information: {}", accountDto);
+
+ LOGGER.debug("Registering user account with information: {}",
+ accountDto);
User registered = new User();
- //OCT 21
- String token = UUID.randomUUID().toString();
- accountDto.setToken(token);
- String appUrl = request.getContextPath();
+ String appUrl = request.getContextPath();
if (!result.hasErrors())
registered = createUserAccount(accountDto, result);
if (registered == null) {
@@ -101,10 +88,10 @@ public class RegistrationController {
if (result.hasErrors()) {
return new ModelAndView("registration", "user", accountDto);
} else {
- //OCT 21
- //FOR ARTICLE 2
- //System.out.println("Will be Sending mail");
- sendConfirmMail(accountDto.getEmail(), request.getLocale(), accountDto.getToken(), appUrl);
+ registration.setAppUrl(appUrl);
+ registration.setLocale(request.getLocale());
+ registration.setUser(registered);
+ registration.deliver();
return new ModelAndView("successRegister", "user", accountDto);
}
}
@@ -113,26 +100,10 @@ public class RegistrationController {
User registered = null;
try {
registered = service.registerNewUserAccount(accountDto);
-
+
} catch (EmailExistsException e) {
return null;
}
return registered;
}
-
- //OCT 21
- //FOR ARTICLE 2
- private void sendConfirmMail(String address, Locale locale, String token, String appUrl){
- String recipientAddress = address;
- String subject = "Registration Confirmation";
- String confirmationUrl = appUrl + "/regitrationConfirm.html?token="+token+"&email="+address;
- String message = messages.getMessage("message.regSucc", null, locale);
- SimpleMailMessage email = new SimpleMailMessage();
- email.setTo(recipientAddress);
- email.setSubject(subject);
- email.setText(message +" \r\n"+ "http://localhost:8080"+confirmationUrl);
- mailSender.send(email);
- }
-
-
}
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 b4b219646e..9dbeb6e4b4 100644
--- a/spring-security-login-and-registration/src/main/resources/application.properties
+++ b/spring-security-login-and-registration/src/main/resources/application.properties
@@ -1,17 +1,17 @@
################### DataSource Configuration ##########################
jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://localhost:3306/AUTHDATA
-jdbc.user=root
-###jdbc.pass=admin###
+jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate4_02?createDatabaseIfNotExist=true
+jdbc.user=tutorialuser
+jdbc.pass=tutorialmy5ql
init-db=false
################### Hibernate Configuration ##########################
hibernate.dialect=org.hibernate.dialect.MySQLDialect
-hibernate.show_sql=true
-hibernate.hbm2ddl.auto=validate
+hibernate.show_sql=false
+hibernate.hbm2ddl.auto=create-drop
################### JavaMail Configuration ##########################
smtp.host=smtp.gmail.com
smtp.port=465
smtp.protocol=smtps
-smtp.username=egmp777@gmail.com
-smtp.password=biiikupozvjvistz
-support.email=egmp777@gmail.com
+smtp.username=
+smtp.password=
+support.email=