Skip to content

Commit 628a293

Browse files
committed
modify registration api
1 parent d1eb454 commit 628a293

File tree

5 files changed

+86
-72
lines changed

5 files changed

+86
-72
lines changed

spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/Registration2Controller.java renamed to spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/OldRegistrationController.java

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,13 @@
1414
import org.baeldung.persistence.service.UserDto;
1515
import org.baeldung.registration.OnRegistrationCompleteEvent;
1616
import org.baeldung.validation.EmailExistsException;
17-
import org.baeldung.web.error.UserNotFoundException;
18-
import org.baeldung.web.util.GenericResponse;
1917
import org.slf4j.Logger;
2018
import org.slf4j.LoggerFactory;
2119
import org.springframework.beans.factory.annotation.Autowired;
2220
import org.springframework.context.ApplicationEventPublisher;
2321
import org.springframework.context.MessageSource;
2422
import org.springframework.core.env.Environment;
23+
import org.springframework.mail.MailAuthenticationException;
2524
import org.springframework.mail.SimpleMailMessage;
2625
import org.springframework.mail.javamail.JavaMailSender;
2726
import org.springframework.security.access.prepost.PreAuthorize;
@@ -37,11 +36,11 @@
3736
import org.springframework.web.bind.annotation.RequestMapping;
3837
import org.springframework.web.bind.annotation.RequestMethod;
3938
import org.springframework.web.bind.annotation.RequestParam;
40-
import org.springframework.web.bind.annotation.ResponseBody;
4139
import org.springframework.web.servlet.ModelAndView;
4240

4341
@Controller
44-
public class Registration2Controller {
42+
@RequestMapping(value = "/old")
43+
public class OldRegistrationController {
4544
private final Logger LOGGER = LoggerFactory.getLogger(getClass());
4645

4746
@Autowired
@@ -62,21 +61,21 @@ public class Registration2Controller {
6261
@Autowired
6362
private Environment env;
6463

65-
public Registration2Controller() {
64+
public OldRegistrationController() {
6665

6766
}
6867

6968
// API
7069

71-
@RequestMapping(value = "/user/registration2", method = RequestMethod.GET)
70+
@RequestMapping(value = "/user/registration", method = RequestMethod.GET)
7271
public String showRegistrationForm(final HttpServletRequest request, final Model model) {
7372
LOGGER.debug("Rendering registration page.");
7473
final UserDto accountDto = new UserDto();
7574
model.addAttribute("user", accountDto);
7675
return "registration";
7776
}
7877

79-
@RequestMapping(value = "/regitrationConfirm2", method = RequestMethod.GET)
78+
@RequestMapping(value = "/regitrationConfirm", method = RequestMethod.GET)
8079
public String confirmRegistration(final HttpServletRequest request, final Model model, @RequestParam("token") final String token) {
8180
final Locale locale = request.getLocale();
8281

@@ -102,7 +101,7 @@ public String confirmRegistration(final HttpServletRequest request, final Model
102101
return "redirect:/login.html?lang=" + locale.getLanguage();
103102
}
104103

105-
@RequestMapping(value = "/user/registration2", method = RequestMethod.POST)
104+
@RequestMapping(value = "/user/registration", method = RequestMethod.POST)
106105
public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid final UserDto accountDto, final BindingResult result, final HttpServletRequest request, final Errors errors) {
107106
LOGGER.debug("Registering user account with information: {}", accountDto);
108107
if (result.hasErrors()) {
@@ -124,34 +123,54 @@ public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid final Use
124123
return new ModelAndView("successRegister", "user", accountDto);
125124
}
126125

127-
@RequestMapping(value = "/user/resendRegistrationToken2", method = RequestMethod.GET)
128-
public @ResponseBody GenericResponse resendRegistrationToken2(final HttpServletRequest request, @RequestParam("token") final String existingToken) {
126+
@RequestMapping(value = "/user/resendRegistrationToken", method = RequestMethod.GET)
127+
public String resendRegistrationToken(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) {
128+
final Locale locale = request.getLocale();
129129
final VerificationToken newToken = userService.generateNewVerificationToken(existingToken);
130130
final User user = userService.getUser(newToken.getToken());
131-
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
132-
final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user);
133-
mailSender.send(email);
134-
return new GenericResponse(messages.getMessage("message.resendToken", null, request.getLocale()));
131+
try {
132+
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
133+
final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user);
134+
mailSender.send(email);
135+
} catch (final MailAuthenticationException e) {
136+
LOGGER.debug("MailAuthenticationException", e);
137+
return "redirect:/emailError.html?lang=" + locale.getLanguage();
138+
} catch (final Exception e) {
139+
LOGGER.debug(e.getLocalizedMessage(), e);
140+
model.addAttribute("message", e.getLocalizedMessage());
141+
return "redirect:/login.html?lang=" + locale.getLanguage();
142+
}
143+
model.addAttribute("message", messages.getMessage("message.resendToken", null, locale));
144+
return "redirect:/login.html?lang=" + locale.getLanguage();
135145
}
136146

137-
@RequestMapping(value = "/user/resetPassword2", method = RequestMethod.POST)
138-
public @ResponseBody GenericResponse resetPassword2(final HttpServletRequest request, @RequestParam("email") final String userEmail) {
147+
@RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST)
148+
public String resetPassword(final HttpServletRequest request, final Model model, @RequestParam("email") final String userEmail) {
139149
final User user = userService.findUserByEmail(userEmail);
140150
if (user == null) {
141-
throw new UserNotFoundException();
151+
model.addAttribute("message", messages.getMessage("message.userNotFound", null, request.getLocale()));
152+
return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
142153
}
143154

144155
final String token = UUID.randomUUID().toString();
145156
userService.createPasswordResetTokenForUser(user, token);
146-
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
147-
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
148-
mailSender.send(email);
149-
150-
return new GenericResponse(messages.getMessage("message.resetPasswordEmail", null, request.getLocale()));
157+
try {
158+
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
159+
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
160+
mailSender.send(email);
161+
} catch (final MailAuthenticationException e) {
162+
LOGGER.debug("MailAuthenticationException", e);
163+
return "redirect:/emailError.html?lang=" + request.getLocale().getLanguage();
164+
} catch (final Exception e) {
165+
LOGGER.debug(e.getLocalizedMessage(), e);
166+
model.addAttribute("message", e.getLocalizedMessage());
167+
return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
168+
}
169+
model.addAttribute("message", messages.getMessage("message.resetPasswordEmail", null, request.getLocale()));
170+
return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
151171
}
152172

153-
// ==== will not be changed this is used as the confirmation url of reset password token
154-
@RequestMapping(value = "/user/changePassword2", method = RequestMethod.GET)
173+
@RequestMapping(value = "/user/changePassword", method = RequestMethod.GET)
155174
public String changePassword(final HttpServletRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) {
156175
final Locale locale = request.getLocale();
157176

@@ -175,18 +194,21 @@ public String changePassword(final HttpServletRequest request, final Model model
175194
return "redirect:/updatePassword.html?lang=" + locale.getLanguage();
176195
}
177196

178-
@RequestMapping(value = "/user/savePassword2", method = RequestMethod.POST)
197+
@RequestMapping(value = "/user/savePassword", method = RequestMethod.POST)
179198
@PreAuthorize("hasRole('READ_PRIVILEGE')")
180-
public @ResponseBody GenericResponse savePassword(final HttpServletRequest request, @RequestParam("password") final String password) {
199+
public String savePassword(final HttpServletRequest request, final Model model, @RequestParam("password") final String password) {
200+
final Locale locale = request.getLocale();
201+
181202
final User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
182203
userService.changeUserPassword(user, password);
183-
return new GenericResponse(messages.getMessage("message.resetPasswordSuc", null, request.getLocale()));
204+
model.addAttribute("message", messages.getMessage("message.resetPasswordSuc", null, locale));
205+
return "redirect:/login.html?lang=" + locale;
184206
}
185207

186208
// NON-API
187209

188210
private final SimpleMailMessage constructResetVerificationTokenEmail(final String contextPath, final Locale locale, final VerificationToken newToken, final User user) {
189-
final String confirmationUrl = contextPath + "/regitrationConfirm.html?token=" + newToken.getToken();
211+
final String confirmationUrl = contextPath + "/old/regitrationConfirm.html?token=" + newToken.getToken();
190212
final String message = messages.getMessage("message.resendToken", null, locale);
191213
final SimpleMailMessage email = new SimpleMailMessage();
192214
email.setSubject("Resend Registration Token");
@@ -197,7 +219,7 @@ private final SimpleMailMessage constructResetVerificationTokenEmail(final Strin
197219
}
198220

199221
private final SimpleMailMessage constructResetTokenEmail(final String contextPath, final Locale locale, final String token, final User user) {
200-
final String url = contextPath + "/user/changePassword2?id=" + user.getId() + "&token=" + token;
222+
final String url = contextPath + "/old/user/changePassword?id=" + user.getId() + "&token=" + token;
201223
final String message = messages.getMessage("message.resetPassword", null, locale);
202224
final SimpleMailMessage email = new SimpleMailMessage();
203225
email.setTo(user.getEmail());

spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
import org.baeldung.persistence.service.UserDto;
1515
import org.baeldung.registration.OnRegistrationCompleteEvent;
1616
import org.baeldung.validation.EmailExistsException;
17+
import org.baeldung.web.error.UserNotFoundException;
18+
import org.baeldung.web.util.GenericResponse;
1719
import org.slf4j.Logger;
1820
import org.slf4j.LoggerFactory;
1921
import org.springframework.beans.factory.annotation.Autowired;
2022
import org.springframework.context.ApplicationEventPublisher;
2123
import org.springframework.context.MessageSource;
2224
import org.springframework.core.env.Environment;
23-
import org.springframework.mail.MailAuthenticationException;
2425
import org.springframework.mail.SimpleMailMessage;
2526
import org.springframework.mail.javamail.JavaMailSender;
2627
import org.springframework.security.access.prepost.PreAuthorize;
@@ -36,6 +37,7 @@
3637
import org.springframework.web.bind.annotation.RequestMapping;
3738
import org.springframework.web.bind.annotation.RequestMethod;
3839
import org.springframework.web.bind.annotation.RequestParam;
40+
import org.springframework.web.bind.annotation.ResponseBody;
3941
import org.springframework.web.servlet.ModelAndView;
4042

4143
@Controller
@@ -123,54 +125,38 @@ public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid final Use
123125
}
124126

125127
@RequestMapping(value = "/user/resendRegistrationToken", method = RequestMethod.GET)
126-
public String resendRegistrationToken(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) {
127-
final Locale locale = request.getLocale();
128+
@ResponseBody
129+
public GenericResponse resendRegistrationToken(final HttpServletRequest request, @RequestParam("token") final String existingToken) {
128130
final VerificationToken newToken = userService.generateNewVerificationToken(existingToken);
129131
final User user = userService.getUser(newToken.getToken());
130-
try {
131-
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
132-
final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user);
133-
mailSender.send(email);
134-
} catch (final MailAuthenticationException e) {
135-
LOGGER.debug("MailAuthenticationException", e);
136-
return "redirect:/emailError.html?lang=" + locale.getLanguage();
137-
} catch (final Exception e) {
138-
LOGGER.debug(e.getLocalizedMessage(), e);
139-
model.addAttribute("message", e.getLocalizedMessage());
140-
return "redirect:/login.html?lang=" + locale.getLanguage();
141-
}
142-
model.addAttribute("message", messages.getMessage("message.resendToken", null, locale));
143-
return "redirect:/login.html?lang=" + locale.getLanguage();
132+
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
133+
final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user);
134+
mailSender.send(email);
135+
136+
return new GenericResponse(messages.getMessage("message.resendToken", null, request.getLocale()));
144137
}
145138

139+
// Reset password
140+
146141
@RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST)
147-
public String resetPassword(final HttpServletRequest request, final Model model, @RequestParam("email") final String userEmail) {
142+
@ResponseBody
143+
public GenericResponse resetPassword(final HttpServletRequest request, @RequestParam("email") final String userEmail) {
148144
final User user = userService.findUserByEmail(userEmail);
149145
if (user == null) {
150-
model.addAttribute("message", messages.getMessage("message.userNotFound", null, request.getLocale()));
151-
return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
146+
throw new UserNotFoundException();
152147
}
153148

154149
final String token = UUID.randomUUID().toString();
155150
userService.createPasswordResetTokenForUser(user, token);
156-
try {
157-
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
158-
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
159-
mailSender.send(email);
160-
} catch (final MailAuthenticationException e) {
161-
LOGGER.debug("MailAuthenticationException", e);
162-
return "redirect:/emailError.html?lang=" + request.getLocale().getLanguage();
163-
} catch (final Exception e) {
164-
LOGGER.debug(e.getLocalizedMessage(), e);
165-
model.addAttribute("message", e.getLocalizedMessage());
166-
return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
167-
}
168-
model.addAttribute("message", messages.getMessage("message.resetPasswordEmail", null, request.getLocale()));
169-
return "redirect:/login.html?lang=" + request.getLocale().getLanguage();
151+
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
152+
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
153+
mailSender.send(email);
154+
155+
return new GenericResponse(messages.getMessage("message.resetPasswordEmail", null, request.getLocale()));
170156
}
171157

172158
@RequestMapping(value = "/user/changePassword", method = RequestMethod.GET)
173-
public String changePassword(final HttpServletRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) {
159+
public String showChangePasswordPage(final HttpServletRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) {
174160
final Locale locale = request.getLocale();
175161

176162
final PasswordResetToken passToken = userService.getPasswordResetToken(token);
@@ -195,13 +181,11 @@ public String changePassword(final HttpServletRequest request, final Model model
195181

196182
@RequestMapping(value = "/user/savePassword", method = RequestMethod.POST)
197183
@PreAuthorize("hasRole('READ_PRIVILEGE')")
198-
public String savePassword(final HttpServletRequest request, final Model model, @RequestParam("password") final String password) {
199-
final Locale locale = request.getLocale();
200-
184+
@ResponseBody
185+
public GenericResponse savePassword(final HttpServletRequest request, @RequestParam("password") final String password) {
201186
final User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
202187
userService.changeUserPassword(user, password);
203-
model.addAttribute("message", messages.getMessage("message.resetPasswordSuc", null, locale));
204-
return "redirect:/login.html?lang=" + locale;
188+
return new GenericResponse(messages.getMessage("message.resetPasswordSuc", null, request.getLocale()));
205189
}
206190

207191
// NON-API

spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ code="label.form.loginSignUp"></spring:message></a>
3131
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
3232
<script type="text/javascript">
3333
function resendToken(){
34-
$.get("<c:url value="/user/resendRegistrationToken2"><c:param name="token" value="${param.token}"/></c:url>", function(data){
34+
$.get("<c:url value="/user/resendRegistrationToken"><c:param name="token" value="${param.token}"/></c:url>", function(data){
3535
window.location.href = "<c:url value="/login.html"></c:url>" + "?message=" + data.message;
3636
})
3737
.fail(function(data) {
@@ -44,6 +44,10 @@ function resendToken(){
4444
}
4545
});
4646
}
47+
48+
$(document).ajaxStart(function() {
49+
$("title").html("LOADING ...");
50+
});
4751
</script>
4852
</c:if>
4953
</body>

spring-security-login-and-registration/src/main/webapp/WEB-INF/view/forgetPassword.jsp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<script type="text/javascript">
4444
function resetPass(){
4545
var email = $("#email").val();
46-
$.post("<c:url value="/user/resetPassword2"></c:url>",{email: email} ,function(data){
46+
$.post("<c:url value="/user/resetPassword"></c:url>",{email: email} ,function(data){
4747
window.location.href = "<c:url value="/login.html"></c:url>" + "?message=" + data.message;
4848
})
4949
.fail(function(data) {
@@ -56,6 +56,10 @@ function resetPass(){
5656
}
5757
});
5858
}
59+
60+
$(document).ajaxStart(function() {
61+
$("title").html("LOADING ...");
62+
});
5963
</script>
6064
</body>
6165

spring-security-login-and-registration/src/main/webapp/WEB-INF/view/updatePassword.jsp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function savePass(){
5151
$("#error").show();
5252
return;
5353
}
54-
$.post("<c:url value="/user/savePassword2"></c:url>",{password: pass} ,function(data){
54+
$.post("<c:url value="/user/savePassword"></c:url>",{password: pass} ,function(data){
5555
window.location.href = "<c:url value="/login.html"></c:url>" + "?message="+data.message;
5656
})
5757
.fail(function(data) {

0 commit comments

Comments
 (0)