Skip to content

Commit 5a3fc61

Browse files
committed
add change password
1 parent 060b232 commit 5a3fc61

File tree

8 files changed

+65
-4
lines changed

8 files changed

+65
-4
lines changed

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ public interface IUserService {
3232
User getUserByID(long id);
3333

3434
void changeUserPassword(User user, String password);
35+
36+
boolean checkIfValidOldPassword(User user, String password);
3537
}

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ public void changeUserPassword(final User user, final String password) {
120120
repository.save(user);
121121
}
122122

123+
@Override
124+
public boolean checkIfValidOldPassword(final User user, final String oldPassword) {
125+
return passwordEncoder.matches(oldPassword, user.getPassword());
126+
}
127+
123128
private boolean emailExist(final String email) {
124129
final User user = repository.findByEmail(email);
125130
if (user != null) {

spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public void addViewControllers(final ViewControllerRegistry registry) {
4949
registry.addViewController("/successRegister.html");
5050
registry.addViewController("/forgetPassword.html");
5151
registry.addViewController("/updatePassword.html");
52+
registry.addViewController("/changePassword.html");
5253
}
5354

5455
@Override

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
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.InvalidOldPasswordException;
1718
import org.baeldung.web.error.UserAlreadyExistException;
1819
import org.baeldung.web.error.UserNotFoundException;
1920
import org.baeldung.web.util.GenericResponse;
@@ -133,7 +134,6 @@ public GenericResponse resetPassword(final HttpServletRequest request, @RequestP
133134
final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
134135
final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user);
135136
mailSender.send(email);
136-
137137
return new GenericResponse(messages.getMessage("message.resetPasswordEmail", null, request.getLocale()));
138138
}
139139

@@ -168,6 +168,19 @@ public GenericResponse savePassword(final Locale locale, @RequestParam("password
168168
return new GenericResponse(messages.getMessage("message.resetPasswordSuc", null, locale));
169169
}
170170

171+
// change user password
172+
173+
@RequestMapping(value = "/user/updatePassword", method = RequestMethod.POST)
174+
@ResponseBody
175+
public GenericResponse changeUserPassword(final Locale locale, @RequestParam("password") final String password, @RequestParam("oldpassword") final String oldPassword) {
176+
final User user = userService.findUserByEmail(SecurityContextHolder.getContext().getAuthentication().getName());
177+
if (!userService.checkIfValidOldPassword(user, oldPassword)) {
178+
throw new InvalidOldPasswordException();
179+
}
180+
userService.changeUserPassword(user, password);
181+
return new GenericResponse(messages.getMessage("message.updatePasswordSuc", null, locale));
182+
}
183+
171184
// NON-API
172185

173186
private final SimpleMailMessage constructResendVerificationTokenEmail(final String contextPath, final Locale locale, final VerificationToken newToken, final User user) {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.baeldung.web.error;
2+
3+
public final class InvalidOldPasswordException extends RuntimeException {
4+
5+
private static final long serialVersionUID = 5861310537366287163L;
6+
7+
public InvalidOldPasswordException() {
8+
super();
9+
}
10+
11+
public InvalidOldPasswordException(final String message, final Throwable cause) {
12+
super(message, cause);
13+
}
14+
15+
public InvalidOldPasswordException(final String message) {
16+
super(message);
17+
}
18+
19+
public InvalidOldPasswordException(final Throwable cause) {
20+
super(cause);
21+
}
22+
23+
}

spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public RestResponseEntityExceptionHandler() {
2929

3030
// 400
3131
@Override
32-
protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
32+
protected ResponseEntity<Object> handleBindException(final BindException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) {
3333
logger.error("400 Status Code", ex);
3434
final BindingResult result = ex.getBindingResult();
3535
final GenericResponse bodyOfResponse = new GenericResponse(result.getFieldErrors(), result.getGlobalErrors());
@@ -44,6 +44,13 @@ protected ResponseEntity<Object> handleMethodArgumentNotValid(final MethodArgume
4444
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
4545
}
4646

47+
@ExceptionHandler({ InvalidOldPasswordException.class })
48+
public ResponseEntity<Object> handleInvalidOldPassword(final RuntimeException ex, final WebRequest request) {
49+
logger.error("400 Status Code", ex);
50+
final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("message.invalidOldPassword", null, request.getLocale()), "InvalidOldEmail");
51+
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
52+
}
53+
4754
// 404
4855
@ExceptionHandler({ UserNotFoundException.class })
4956
public ResponseEntity<Object> handleUserNotFound(final RuntimeException ex, final WebRequest request) {

spring-security-login-and-registration/src/main/resources/messages_en.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,9 @@ message.accountVerified=Your account verified successfully
6464
message.resetPasswordSuc=Password reset successfully
6565
message.resetYourPassword=Reset your password
6666
message.resetPasswordEmail=You should receive an Password Reset Email shortly
67-
message.error=Error Occurred
67+
message.error=Error Occurred
68+
message.updatePasswordSuc=Password updated successfully
69+
message.changePassword=Change Password
70+
message.invalidOldPassword=Invalid Old Password
71+
label.user.newPassword=New Password
72+
label.user.oldPassword=Old Password

spring-security-login-and-registration/src/main/resources/messages_es_ES.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,9 @@ message.accountVerified=Su cuenta verificada con
6464
message.resetPasswordSuc=Contraseña reajusta correctamente
6565
message.resetYourPassword=Restablecer su contraseña
6666
message.resetPasswordEmail=Te enviaremos un correo electrónico para restablecer su contraseña
67-
message.error=Se produjo un error
67+
message.error=Se produjo un error
68+
message.updatePasswordSuc=Contraseña actualizado correctamente
69+
message.changePassword=Cambiar La Contraseña
70+
message.invalidOldPassword=Inválida contraseña antigua
71+
label.user.newPassword=Nueva Contraseña
72+
label.user.oldPassword=Contraseña Anterior

0 commit comments

Comments
 (0)