modify spring security registration

This commit is contained in:
DOHA 2015-02-14 17:52:46 +02:00
parent f333a60a71
commit 4d8824c809
6 changed files with 67 additions and 22 deletions

View File

@ -8,11 +8,14 @@ import org.baeldung.registration.OnRegistrationCompleteEvent;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@PropertySource("classpath:email.properties")
public class RegistrationListener implements ApplicationListener<OnRegistrationCompleteEvent> { public class RegistrationListener implements ApplicationListener<OnRegistrationCompleteEvent> {
@Autowired @Autowired
private IUserService service; private IUserService service;
@ -23,6 +26,9 @@ public class RegistrationListener implements ApplicationListener<OnRegistrationC
@Autowired @Autowired
private JavaMailSender mailSender; private JavaMailSender mailSender;
@Autowired
private Environment env;
// API // API
@Override @Override
@ -44,13 +50,13 @@ public class RegistrationListener implements ApplicationListener<OnRegistrationC
private final SimpleMailMessage constructEmailMessage(final OnRegistrationCompleteEvent event, final User user, final String token) { private final SimpleMailMessage constructEmailMessage(final OnRegistrationCompleteEvent event, final User user, final String token) {
final String recipientAddress = user.getEmail(); final String recipientAddress = user.getEmail();
final String subject = "Registration Confirmation"; final String subject = "Registration Confirmation";
final String confirmationUrl = "http://" + event.getAppUrl() + "/regitrationConfirm.html?token=" + token; final String confirmationUrl = event.getAppUrl() + "/regitrationConfirm.html?token=" + token;
final String message = messages.getMessage("message.regSucc", null, event.getLocale()); final String message = messages.getMessage("message.regSucc", null, event.getLocale());
final SimpleMailMessage email = new SimpleMailMessage(); final SimpleMailMessage email = new SimpleMailMessage();
email.setTo(recipientAddress); email.setTo(recipientAddress);
email.setSubject(subject); email.setSubject(subject);
email.setText(message + " \r\n" + confirmationUrl); email.setText(message + " \r\n" + confirmationUrl);
email.setFrom("eugen@baeldung.com"); email.setFrom(env.getProperty("support.email"));
return email; return email;
} }

View File

@ -20,6 +20,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.context.NoSuchMessageException; import org.springframework.context.NoSuchMessageException;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.mail.MailAuthenticationException; import org.springframework.mail.MailAuthenticationException;
import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSender;
@ -43,6 +45,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@Controller @Controller
@PropertySource("classpath:email.properties")
public class RegistrationController { public class RegistrationController {
private final Logger LOGGER = LoggerFactory.getLogger(getClass()); private final Logger LOGGER = LoggerFactory.getLogger(getClass());
@ -61,6 +64,9 @@ public class RegistrationController {
@Autowired @Autowired
private UserDetailsService userDetailsService; private UserDetailsService userDetailsService;
@Autowired
private Environment env;
public RegistrationController() { public RegistrationController() {
} }
@ -97,6 +103,7 @@ public class RegistrationController {
user.setEnabled(true); user.setEnabled(true);
userService.saveRegisteredUser(user); userService.saveRegisteredUser(user);
model.addAttribute("message", messages.getMessage("message.accountVerified", null, locale));
return "redirect:/login.html?lang=" + locale.getLanguage(); return "redirect:/login.html?lang=" + locale.getLanguage();
} }
@ -113,7 +120,7 @@ public class RegistrationController {
return new ModelAndView("registration", "user", accountDto); return new ModelAndView("registration", "user", accountDto);
} }
try { try {
final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl)); eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl));
} catch (final Exception ex) { } catch (final Exception ex) {
LOGGER.warn("Unable to register user", ex); LOGGER.warn("Unable to register user", ex);
@ -128,7 +135,7 @@ public class RegistrationController {
final VerificationToken newToken = userService.generateNewVerificationToken(existingToken); final VerificationToken newToken = userService.generateNewVerificationToken(existingToken);
final User user = userService.getUser(newToken.getToken()); final User user = userService.getUser(newToken.getToken());
try { try {
final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user); final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user);
mailSender.send(email); mailSender.send(email);
} catch (final MailAuthenticationException e) { } catch (final MailAuthenticationException e) {
@ -147,7 +154,7 @@ public class RegistrationController {
public @ResponseBody String resendRegistrationToken2(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) throws JsonProcessingException, NoSuchMessageException { 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 VerificationToken newToken = userService.generateNewVerificationToken(existingToken);
final User user = userService.getUser(newToken.getToken()); final User user = userService.getUser(newToken.getToken());
final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user); final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user);
mailSender.send(email); mailSender.send(email);
return new ObjectMapper().writeValueAsString(messages.getMessage("message.resendToken", null, request.getLocale())); return new ObjectMapper().writeValueAsString(messages.getMessage("message.resendToken", null, request.getLocale()));
@ -164,7 +171,7 @@ public class RegistrationController {
final String token = UUID.randomUUID().toString(); final String token = UUID.randomUUID().toString();
userService.createPasswordResetTokenForUser(user, token); userService.createPasswordResetTokenForUser(user, token);
try { try {
final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user); final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
mailSender.send(email); mailSender.send(email);
} catch (final MailAuthenticationException e) { } catch (final MailAuthenticationException e) {
@ -175,7 +182,7 @@ public class RegistrationController {
model.addAttribute("message", e.getLocalizedMessage()); model.addAttribute("message", e.getLocalizedMessage());
return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
} }
model.addAttribute("message", messages.getMessage("message.resetPassword", null, request.getLocale())); model.addAttribute("message", messages.getMessage("message.resetPasswordEmail", null, request.getLocale()));
return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
} }
@ -188,12 +195,11 @@ public class RegistrationController {
final String token = UUID.randomUUID().toString(); final String token = UUID.randomUUID().toString();
userService.createPasswordResetTokenForUser(user, token); userService.createPasswordResetTokenForUser(user, token);
final String appUrl = request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user); final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
email.setFrom("eugen@baeldung.com");
mailSender.send(email); mailSender.send(email);
return new ObjectMapper().writeValueAsString(messages.getMessage("message.resetPassword", null, request.getLocale())); return new ObjectMapper().writeValueAsString(messages.getMessage("message.resetPasswordEmail", null, request.getLocale()));
} }
@RequestMapping(value = "/user/changePassword", method = RequestMethod.GET) @RequestMapping(value = "/user/changePassword", method = RequestMethod.GET)
@ -227,7 +233,7 @@ public class RegistrationController {
final User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); final User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
userService.changeUserPassword(user, password); userService.changeUserPassword(user, password);
model.addAttribute("message", messages.getMessage("message.resetPasswordSuc", null, locale));
return "redirect:/login.html?lang=" + locale; return "redirect:/login.html?lang=" + locale;
} }
@ -240,6 +246,7 @@ public class RegistrationController {
email.setSubject("Resend Registration Token"); email.setSubject("Resend Registration Token");
email.setText(message + " \r\n" + confirmationUrl); email.setText(message + " \r\n" + confirmationUrl);
email.setTo(user.getEmail()); email.setTo(user.getEmail());
email.setFrom(env.getProperty("support.email"));
return email; return email;
} }
@ -250,6 +257,7 @@ public class RegistrationController {
email.setTo(user.getEmail()); email.setTo(user.getEmail());
email.setSubject("Reset Password"); email.setSubject("Reset Password");
email.setText(message + " \r\n" + url); email.setText(message + " \r\n" + url);
email.setFrom(env.getProperty("support.email"));
return email; return email;
} }
@ -262,4 +270,4 @@ public class RegistrationController {
} }
return registered; return registered;
} }
} }

View File

@ -54,9 +54,13 @@ NotEmpty.user.matchingPassword=Required
PasswordMatches.user:Password does not match! PasswordMatches.user:Password does not match!
Email.user.email=Invalid Username (Email) Email.user.email=Invalid Username (Email)
label.form.resendRegistrationToken=Re-send Token label.form.resendRegistrationToken=Re-send Token
message.resendToken=We will send you a message with a new registration token to your email account message.resendToken=We will send an email with a new registration token to your email account
message.forgetPassword=Forget Password message.forgetPassword=Forget Password
message.resetPassword=Reset Password message.resetPassword=Reset Password
message.updatePassword=Update Password message.updatePassword=Update Password
message.userNotFound=User Not Found message.userNotFound=User Not Found
auth.message.blocked=This ip is blocked for 24 hours auth.message.blocked=This ip is blocked for 24 hours
message.accountVerified=Your account verified successfully
message.resetPasswordSuc=Password reset successfully
message.resetYourPassword=Reset your password
message.resetPasswordEmail=We will send an email to reset your password

View File

@ -54,9 +54,13 @@ NotEmpty.user.matchingPassword=Campo obligatrio
PasswordMatches.user:Las claves no coinciden! PasswordMatches.user:Las claves no coinciden!
Email.user.email=Email no es valido Email.user.email=Email no es valido
label.form.resendRegistrationToken=Reenviar mensaje de emergencia label.form.resendRegistrationToken=Reenviar mensaje de emergencia
message.resendToken=Le enviaremos un mensaje con un nuevo token de registro en su cuenta de correo electrónico message.resendToken=Te enviaremos un correo electrónico con un nuevo token de registro en su cuenta de correo electrónico
message.forgetPassword=Olvide la contraseña message.forgetPassword=Olvide la contraseña
message.resetPassword=Restablecer contraseña message.resetPassword=Restablecer contraseña
message.updatePassword=Actualizar contraseña message.updatePassword=Actualizar contraseña
message.userNotFound=Usuario no encontrado message.userNotFound=Usuario no encontrado
auth.message.blocked=Esta IP se bloquea durante 24 horas auth.message.blocked=Esta IP se bloquea durante 24 horas
message.accountVerified=Su cuenta verificada con éxito
message.resetPasswordSuc=Contraseña reajusta correctamente
message.resetYourPassword=Restablecer su contraseña
message.resetPasswordEmail=Te enviaremos un correo electrónico para restablecer su contraseña

View File

@ -30,8 +30,13 @@
<spring:message code="message.resetPassword"></spring:message> <spring:message code="message.resetPassword"></spring:message>
</button> </button>
</div> </div>
<br> <a href="<c:url value="registration.html" />"><spring:message
code="label.form.loginSignUp"></spring:message></a> <br>
<a href="<c:url value="registration.html" />"><spring:message code="label.form.loginSignUp"></spring:message></a>
<br>
<a href="<c:url value="login.html" />"><spring:message code="label.form.loginLink"></spring:message></a>
</div> </div>
</div> </div>

View File

@ -17,16 +17,23 @@
<div class="container"> <div class="container">
<div class="span12"> <div class="span12">
<H1> <H1>
<spring:message code="message.updatePassword"></spring:message> <spring:message code="message.resetYourPassword"></spring:message>
</H1> </H1>
<form:form action="user/savePassword" method="POST" enctype="utf8"> <form:form action="user/savePassword" method="POST" enctype="utf8">
<br> <br>
<tr> <tr>
<td><label><spring:message code="label.user.password"></spring:message></label></td> <td><label><spring:message code="label.user.password"></spring:message></label></td>
<td><input name="password" type="password" value="" /></td> <td><input id="pass" name="password" type="password" value="" /></td>
</tr> </tr>
<tr>
<td><label><spring:message code="label.user.confirmPass"></spring:message></label></td>
<td>
<input id="passConfirm" type="password" value="" />
<span id="error" class="alert alert-error" style="display:none"><spring:message code="PasswordMatches.user"></spring:message></span>
</td>
</tr>
<br><br>
<button type="submit"> <button type="submit">
<spring:message code="message.updatePassword"></spring:message> <spring:message code="message.updatePassword"></spring:message>
</button> </button>
@ -35,7 +42,18 @@
</div> </div>
</div> </div>
</sec:authorize> </sec:authorize>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('form').on('submit', function(e){
var valid = $("#pass").val() == $("#passConfirm").val();
if(!valid) {
e.preventDefault();
$("#error").show();
}
});
});
</script>
</body> </body>
</html> </html>