From 53c0dbbbdd231c7deb0c393eeb66ece4265b20c0 Mon Sep 17 00:00:00 2001 From: egmp777 Date: Mon, 8 Sep 2014 13:55:58 -0500 Subject: [PATCH] Changes September --- .../persistence/dao/UserRepository.java | 2 +- .../org/baeldung/persistence/model/User.java | 18 ++++---- ...nameValidator.java => EmailValidator.java} | 4 +- .../persistence/service/IUserService.java | 9 ++++ .../service/RepositoryService.java | 46 ------------------- .../baeldung/persistence/service/UserDto.java | 22 ++++----- .../persistence/service/UserService.java | 34 +++++++++++++- .../{ValidUsername.java => ValidEmail.java} | 4 +- .../security/MyUserDetailsService.java | 21 +++++---- .../java/org/baeldung/spring/MvcConfig.java | 6 +-- .../controller/RegistrationController.java | 17 +++++-- .../src/main/resources/messages_en.properties | 22 ++++++--- .../main/resources/messages_es_ES.properties | 24 +++++++--- .../src/main/resources/webSecurityConfig.xml | 5 +- .../src/main/webapp/WEB-INF/view/login.jsp | 14 +++--- .../main/webapp/WEB-INF/view/registration.jsp | 25 +++++----- .../webapp/WEB-INF/view/successRegister.jsp | 4 +- 17 files changed, 148 insertions(+), 129 deletions(-) rename spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/{UsernameValidator.java => EmailValidator.java} (83%) create mode 100644 spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/IUserService.java delete mode 100644 spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/RepositoryService.java rename spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/{ValidUsername.java => ValidEmail.java} (88%) diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/dao/UserRepository.java index 373a28b476..2dd1849078 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/dao/UserRepository.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/dao/UserRepository.java @@ -4,5 +4,5 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.baeldung.persistence.model.User; public interface UserRepository extends JpaRepository { - public User findByUsername(String username); + public User findByEmail(String email); } diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/model/User.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/model/User.java index 33851c9fa5..0a803c251b 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/model/User.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/model/User.java @@ -21,8 +21,8 @@ public class User { private String firstName; @Column(name = "lastName") private String lastName; - @Column(name = "username") - private String username; + @Column(name = "email") + private String email; @Column(name = "password") private String password; @@ -53,12 +53,12 @@ public class User { this.lastName = lastName; } - public String getUsername() { - return username; + public String getEmail() { + return email; } - public void setUsername(String username) { - this.username = username; + public void setEmail(String email) { + this.email = email; } public String getPassword() { @@ -81,7 +81,7 @@ public class User { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((username == null) ? 0 : username.hashCode()); + result = prime * result + ((email == null) ? 0 : email.hashCode()); return result; } @@ -94,7 +94,7 @@ public class User { if (getClass() != obj.getClass()) return false; final User user = (User) obj; - if (!username.equals(user.username)) + if (!email.equals(user.email)) return false; return true; } @@ -102,7 +102,7 @@ public class User { @Override public String toString() { final StringBuilder builder = new StringBuilder(); - builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(username).append("]"); + builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[email").append(email).append("]"); return builder.toString(); } } \ No newline at end of file diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UsernameValidator.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/EmailValidator.java similarity index 83% rename from spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UsernameValidator.java rename to spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/EmailValidator.java index 67a7753801..19907ce504 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UsernameValidator.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/EmailValidator.java @@ -6,13 +6,13 @@ import java.util.regex.Pattern; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; -public class UsernameValidator implements ConstraintValidator { +public class EmailValidator implements ConstraintValidator { private Pattern pattern; private Matcher matcher; private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; @Override - public void initialize(ValidUsername constraintAnnotation) { + public void initialize(ValidEmail constraintAnnotation) { } @Override diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/IUserService.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/IUserService.java new file mode 100644 index 0000000000..f8e0651871 --- /dev/null +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/IUserService.java @@ -0,0 +1,9 @@ +package org.baeldung.persistence.service; + +import org.baeldung.persistence.model.User; + +public interface IUserService { + + public User registerNewUserAccount(UserDto userAccountData) throws EmailExistsException; + +} diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/RepositoryService.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/RepositoryService.java deleted file mode 100644 index 06730f1b65..0000000000 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/RepositoryService.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.baeldung.persistence.service; - -import javax.transaction.Transactional; -import org.baeldung.persistence.dao.UserRepository; -import org.baeldung.persistence.model.Role; -import org.baeldung.persistence.model.User; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Service; - -@Service -public class RepositoryService implements UserService { - @Autowired - private UserRepository repository; - @Autowired - private Environment env; - - @Autowired - public RepositoryService(UserRepository repository) { - this.repository = repository; - } - - @Transactional - @Override - public User registerNewUserAccount(UserDto userAccountData) throws EmailExistsException { - if (emailExist(userAccountData.getUsername())) { - - throw new EmailExistsException("There is an account with that email adress: " + userAccountData.getUsername()); - } - User user = new User(); - user.setFirstName(userAccountData.getFirstName()); - user.setLastName(userAccountData.getLastName()); - user.setPassword(userAccountData.getPassword()); - user.setUsername(userAccountData.getUsername()); - user.setRole(new Role(userAccountData.getRole(), user)); - return repository.save(user); - } - - private boolean emailExist(String email) { - User user = repository.findByUsername(email); - if (user != null) { - return true; - } - return false; - } -} diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserDto.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserDto.java index bc2bd020c9..61aff31567 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserDto.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserDto.java @@ -16,10 +16,18 @@ public class UserDto { @NotNull @NotEmpty private String matchingPassword; - @ValidUsername + @ValidEmail @NotNull @NotEmpty - private String username; + private String email; + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + private Integer role; public Integer getRole() { @@ -30,14 +38,6 @@ public class UserDto { this.role = role; } - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - public String getFirstName() { return firstName; } @@ -71,7 +71,7 @@ public class UserDto { @Override public String toString() { final StringBuilder builder = new StringBuilder(); - builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(username).append("]").append("[password").append(password).append("]"); + builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[email").append(email).append("]").append("[password").append(password).append("]"); return builder.toString(); } } diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserService.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserService.java index 44187e2c85..1a083c557c 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserService.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/UserService.java @@ -1,9 +1,39 @@ package org.baeldung.persistence.service; +import javax.transaction.Transactional; +import org.baeldung.persistence.dao.UserRepository; +import org.baeldung.persistence.model.Role; import org.baeldung.persistence.model.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; -public interface UserService { +@Service +public class UserService implements IUserService { + @Autowired + private UserRepository repository; + + @Transactional + @Override + public User registerNewUserAccount(UserDto userAccountData) throws EmailExistsException { + if (emailExist(userAccountData.getEmail())) { - public User registerNewUserAccount(UserDto userAccountData) throws EmailExistsException; + throw new EmailExistsException("There is an account with that email adress: " + userAccountData.getEmail()); + } + User user = new User(); + user.setFirstName(userAccountData.getFirstName()); + user.setLastName(userAccountData.getLastName()); + user.setPassword(userAccountData.getPassword()); + user.setEmail(userAccountData.getEmail()); + //ROLE WILL ALWAYS BE USER. HARDCODING IT + 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; + } } diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/ValidUsername.java b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/ValidEmail.java similarity index 88% rename from spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/ValidUsername.java rename to spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/ValidEmail.java index 9aed811713..3ad5558df2 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/ValidUsername.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/persistence/service/ValidEmail.java @@ -12,9 +12,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Target({ TYPE, FIELD, ANNOTATION_TYPE }) @Retention(RUNTIME) -@Constraint(validatedBy = UsernameValidator.class) +@Constraint(validatedBy = EmailValidator.class) @Documented -public @interface ValidUsername { +public @interface ValidEmail { String message() default "Invalid Email"; diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-security-login-error-handling/src/main/java/org/baeldung/security/MyUserDetailsService.java index 464a747683..7ff7789519 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -21,19 +21,20 @@ import org.springframework.transaction.annotation.Transactional; @Transactional public class MyUserDetailsService implements UserDetailsService { - private static final Logger LOGGER = LoggerFactory.getLogger(UserDetailsService.class); - - private UserRepository userRepository; + private final Logger LOGGER = LoggerFactory.getLogger(getClass()); @Autowired - public MyUserDetailsService(UserRepository repository) { - this.userRepository = repository; - } + private UserRepository userRepository; - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + // @Autowired + // public MyUserDetailsService(UserRepository repository) { + // this.userRepository = repository; + // } + + public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { try { - LOGGER.debug("Loading user by username: {}", username); - User user = userRepository.findByUsername(username); + LOGGER.debug("Loading user by username: {}", email); + User user = userRepository.findByEmail(email); LOGGER.debug("Found user: {}", user); if (user == null) { // throw new UsernameNotFoundException("No user found with username: " + username); @@ -44,7 +45,7 @@ public class MyUserDetailsService implements UserDetailsService { boolean accountNonExpired = true; boolean credentialsNonExpired = true; boolean accountNonLocked = true; - return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword().toLowerCase(), enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, getAuthorities(user.getRole().getRole())); + return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword().toLowerCase(), enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, getAuthorities(user.getRole().getRole())); } catch (Exception e) { throw new RuntimeException(e); diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/spring/MvcConfig.java b/spring-security-login-error-handling/src/main/java/org/baeldung/spring/MvcConfig.java index 4dc7f039fe..4c7a84ef86 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/spring/MvcConfig.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/spring/MvcConfig.java @@ -3,7 +3,7 @@ package org.baeldung.spring; import java.util.Locale; import org.baeldung.persistence.service.PasswordMatchesValidator; -import org.baeldung.persistence.service.UsernameValidator; +import org.baeldung.persistence.service.EmailValidator; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -85,8 +85,8 @@ public class MvcConfig extends WebMvcConfigurerAdapter { } @Bean - public UsernameValidator usernameValidator() { - UsernameValidator userNameValidator = new UsernameValidator(); + public EmailValidator usernameValidator() { + EmailValidator userNameValidator = new EmailValidator(); return userNameValidator; } diff --git a/spring-security-login-error-handling/src/main/java/org/baeldung/web/controller/RegistrationController.java b/spring-security-login-error-handling/src/main/java/org/baeldung/web/controller/RegistrationController.java index e41cb26783..73732c7a2c 100644 --- a/spring-security-login-error-handling/src/main/java/org/baeldung/web/controller/RegistrationController.java +++ b/spring-security-login-error-handling/src/main/java/org/baeldung/web/controller/RegistrationController.java @@ -1,10 +1,11 @@ package org.baeldung.web.controller; import javax.validation.Valid; + import org.baeldung.persistence.model.User; import org.baeldung.persistence.service.EmailExistsException; import org.baeldung.persistence.service.UserDto; -import org.baeldung.persistence.service.UserService; +import org.baeldung.persistence.service.IUserService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,12 +24,12 @@ import org.springframework.web.servlet.ModelAndView; public class RegistrationController { private final Logger LOGGER = LoggerFactory.getLogger(getClass()); - private UserService service; + private IUserService service; @Autowired private MessageSource messages; @Autowired - public RegistrationController(UserService service) { + public RegistrationController(IUserService service) { this.service = service; } @@ -47,12 +48,20 @@ public class RegistrationController { if (!result.hasErrors()) registered = createUserAccount(userAccountData, result); if (registered == null) { - result.rejectValue("username", "message.regError"); + result.rejectValue("email", "message.regError"); } if (result.hasErrors()) { return new ModelAndView("registration", "user", userAccountData); } else { + // Will show the success registration page--ORIGINAL return new ModelAndView("successRegister", "user", userAccountData); + + // Will redirect to login view (not in url as login.html) and user model can be accessed + // return new ModelAndView("login","user", userAccountData); + + + // Will redirect to login html but no model object---we send a success param to the login form + //return new ModelAndView("redirect:/login.html?success=true", "", null); } } diff --git a/spring-security-login-error-handling/src/main/resources/messages_en.properties b/spring-security-login-error-handling/src/main/resources/messages_en.properties index 0d4393fb5e..b8ec5102fa 100644 --- a/spring-security-login-error-handling/src/main/resources/messages_en.properties +++ b/spring-security-login-error-handling/src/main/resources/messages_en.properties @@ -10,12 +10,22 @@ 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 -label.user.email=Email -label.user.firstName=First name -label.user.lastName=Last name -label.user.password=Password +label.user.email=Email: +label.user.firstName=First name: +label.user.lastName=Last name: +label.user.password=Password: +label.user.confirmPass=Confirm password +label.form.submit=Submit +label.form.title=Registration Form +label.form.loginLink=Back to login label.login=Login here -ValidUsername.user.username=Invalid Username (Email) +label.form.loginTitle=Login +label.form.loginEmail=Email +label.form.loginPass=Password +label.form.loginEnglish=English +label.form.loginSpanish=Spanish +label.form.loginSignUp=Sign up +ValidEmail.user.email=Invalid email address! UniqueUsername.user.username=An account with that username/email already exists NotNull.user.firstName=First name required NotEmpty.user.firstName=First name required @@ -28,4 +38,4 @@ NotEmpty.user.password=Password required NotNull.user.matchingPassword=Required NotEmpty.user.matchingPassword=Required PasswordMatches.user:Password does not match! -Email.user.username=Invalid Username (Email) \ No newline at end of file +Email.user.email=Invalid Username (Email) \ No newline at end of file diff --git a/spring-security-login-error-handling/src/main/resources/messages_es_ES.properties b/spring-security-login-error-handling/src/main/resources/messages_es_ES.properties index 2084b14667..c28ee68c24 100644 --- a/spring-security-login-error-handling/src/main/resources/messages_es_ES.properties +++ b/spring-security-login-error-handling/src/main/resources/messages_es_ES.properties @@ -10,12 +10,22 @@ 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 -label.user.email=Email -label.user.firstName=Nombre -label.user.lastName=Apellido -label.user.password=Clave +label.user.email=Correo Electronico: +label.user.firstName=Nombre: +label.user.lastName=Apellido: +label.user.password=Contrasenia: +label.user.confirmPass=Confirme la contrasenia +label.form.submit=Enviar +label.form.title=Formulario de Registro label.login=Autehtifiquese aqui -ValidUsername.user.username=Email no es valido +label.form.loginTitle=Ingreso +label.form.loginLink=Regrese a autentificacion +label.form.loginEmail=Correo Electronico +label.form.loginPass=Contrasenia +label.form.loginEnglish=Ingles +label.form.loginSpanish=Espaniol +label.form.loginSignUp=Registrese +ValidEmail.user.email=Cuenta correo invlida! UniqueUsername.user.username=Ya existe una cuenta con ese nombre de usuario NotNull.user.firstName=Por favor ingrese su nombre NotEmpty.user.firstName=Por favor ingrese su nombre @@ -24,8 +34,8 @@ NotEmpty.user.lastName=Por favor ingrese su apellido NotNull.user.username=Por favor ingrese su cuenta de email NotEmpty.user.username=Por favor ingrese su cuenta de email NotNull.user.password=Por favor ingrese su clave -NotEmpty.user.password=Por favor ingrese su clave +NotEmpty.user.password=Por favor ingrese su contraseņa NotNull.user.matchingPassword=Campo obligatirio NotEmpty.user.matchingPassword=Campo obligatrio PasswordMatches.user:Las claves no coinciden! -Email.user.username=Email no es valido +Email.user.email=Email no es valido diff --git a/spring-security-login-error-handling/src/main/resources/webSecurityConfig.xml b/spring-security-login-error-handling/src/main/resources/webSecurityConfig.xml index 70e80d9023..d584ff342f 100644 --- a/spring-security-login-error-handling/src/main/resources/webSecurityConfig.xml +++ b/spring-security-login-error-handling/src/main/resources/webSecurityConfig.xml @@ -28,12 +28,9 @@ class="org.baeldung.security.MySimpleUrlAuthenticationSuccessHandler" /> - + - \ No newline at end of file diff --git a/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/login.jsp b/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/login.jsp index 626554b4af..ea196f0114 100644 --- a/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/login.jsp +++ b/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/login.jsp @@ -37,28 +37,28 @@ -

Login

- English | - Spanish +

+ | +
- + - + - +
User:
Password:
/>

Current Locale : ${pageContext.response.locale}
- ">Sign Up + "> \ No newline at end of file diff --git a/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/registration.jsp b/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/registration.jsp index ae90159475..38eb4cf9eb 100644 --- a/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/registration.jsp +++ b/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/registration.jsp @@ -9,43 +9,42 @@ " rel="stylesheet"> -Registration +<spring:message code="label.form.title"></spring:message> -

This is the registration page

- +

+
- + - + - - - + + + - + - + - - +

- ">Back to Login + "> \ No newline at end of file diff --git a/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/successRegister.jsp b/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/successRegister.jsp index 323780263d..d23a2e298f 100644 --- a/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/successRegister.jsp +++ b/spring-security-login-error-handling/src/main/webapp/WEB-INF/view/successRegister.jsp @@ -13,9 +13,9 @@ Registration Success -

+
-

+ ">