From ff96ecf8a15c7a19616c08349c94b89dca29cd6e Mon Sep 17 00:00:00 2001 From: rayankonecny Date: Thu, 18 Dec 2025 04:53:14 +0000 Subject: [PATCH] Fix type of throws exceptions on methods --- .../ControllerExceptionHandler.java | 47 ++++++++++++++----- .../controllers/impl/AuthControllerImpl.java | 2 +- .../authserviceapi/services/AuthService.java | 2 +- .../services/UserDetailsServiceImpl.java | 2 +- .../src/main/resources/application.yml | 2 +- 5 files changed, 38 insertions(+), 17 deletions(-) diff --git a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/exceptions/ControllerExceptionHandler.java b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/exceptions/ControllerExceptionHandler.java index df99a7b..6ea6ca5 100644 --- a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/exceptions/ControllerExceptionHandler.java +++ b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/exceptions/ControllerExceptionHandler.java @@ -3,34 +3,41 @@ package br.com.rayankonecny.authserviceapi.controllers.exceptions; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import jakarta.servlet.http.HttpServletRequest; import br.com.rayankonecny.hdcommoslib.models.exceptions.RefreshTokenExpired; import br.com.rayankonecny.hdcommoslib.models.exceptions.StandardError; +import br.com.rayankonecny.hdcommoslib.models.exceptions.ValidationException; + import static java.time.LocalDateTime.now; import static org.springframework.http.HttpStatus.NOT_FOUND; import static org.springframework.http.HttpStatus.UNAUTHORIZED; +import static org.springframework.http.HttpStatus.BAD_REQUEST; + +import java.util.ArrayList; @ControllerAdvice public class ControllerExceptionHandler { - @ExceptionHandler(UsernameNotFoundException.class) - ResponseEntity handleNotFoundException(final UsernameNotFoundException ex,final HttpServletRequest request) { + // @ExceptionHandler(UsernameNotFoundException.class) + // ResponseEntity handleNotAuthorizedException(final UsernameNotFoundException ex,final HttpServletRequest request) { - return ResponseEntity.status(NOT_FOUND).body( - StandardError.builder() - .timestamp(now()) - .status(NOT_FOUND.value()) - .error(NOT_FOUND.getReasonPhrase()) - .message(ex.getMessage()) - .path(request.getRequestURI()) - .build()); - } + // return ResponseEntity.status(UNAUTHORIZED).body( + // StandardError.builder() + // .timestamp(now()) + // .status(UNAUTHORIZED.value()) + // .error(UNAUTHORIZED.getReasonPhrase()) + // .message(ex.getMessage()) + // .path(request.getRequestURI()) + // .build()); + // } - @ExceptionHandler({BadCredentialsException.class,RefreshTokenExpired.class}) - ResponseEntity handleBadCredentialsException(final BadCredentialsException ex, final HttpServletRequest request) { + @ExceptionHandler({BadCredentialsException.class,RefreshTokenExpired.class,UsernameNotFoundException.class}) + ResponseEntity handleBadCredentialsException(final RuntimeException ex, final HttpServletRequest request) { return ResponseEntity.status(UNAUTHORIZED).body( StandardError.builder() @@ -41,4 +48,18 @@ public class ControllerExceptionHandler { .path(request.getRequestURI()) .build()); } + + @ExceptionHandler(MethodArgumentNotValidException.class) + ResponseEntity handleMethodArgumentNotValidException(final MethodArgumentNotValidException ex, + final HttpServletRequest request) { + + var error = ValidationException.builder().timestamp(now()).status(BAD_REQUEST.value()).error("ValidationException") + .message("Exception in validation attributes").path(request.getRequestURI()).errors(new ArrayList<>()).build(); + + for (FieldError fieldError : ex.getBindingResult().getFieldErrors()) { + error.addError(fieldError.getField(), fieldError.getDefaultMessage()); + } + + return ResponseEntity.badRequest().body(error); + } } diff --git a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/impl/AuthControllerImpl.java b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/impl/AuthControllerImpl.java index f37c2b9..54f7c51 100644 --- a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/impl/AuthControllerImpl.java +++ b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/controllers/impl/AuthControllerImpl.java @@ -25,7 +25,7 @@ public class AuthControllerImpl implements AuthController { return ResponseEntity.ok(authService.authenticate(request)); } - + @Override public ResponseEntity refreshToken(@Valid RefreshTokenRequest request) throws Exception { return ResponseEntity.ok().body(refreshService.refreshToken(request.refreshToken())); diff --git a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/AuthService.java b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/AuthService.java index eba8dd7..501f72b 100644 --- a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/AuthService.java +++ b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/AuthService.java @@ -25,7 +25,7 @@ public class AuthService { var user = userDetailsService.loadUserByUsername(request.email()); if (!passwordEncoder.matches(request.password(), user.getPassword())) { - throw new BadCredentialsException("Invalid credentials"); + throw new BadCredentialsException("Email or password invalid"); } String token = jwtUtils.generateToken(user); diff --git a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/UserDetailsServiceImpl.java b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/UserDetailsServiceImpl.java index 2581771..529f88c 100644 --- a/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/UserDetailsServiceImpl.java +++ b/auth-service-api/src/main/java/br/com/rayankonecny/authserviceapi/services/UserDetailsServiceImpl.java @@ -21,7 +21,7 @@ public class UserDetailsServiceImpl implements UserDetailsService { public UserDetailsDTO loadUserByUsername(final String email) throws UsernameNotFoundException { final var entity = repository.findByEmail(email) - .orElseThrow(() -> new UsernameNotFoundException("User not found: " + email)); + .orElseThrow(() -> new UsernameNotFoundException("Email or password invalid")); return UserDetailsDTO.builder() .id(entity.getId()) diff --git a/auth-service-api/src/main/resources/application.yml b/auth-service-api/src/main/resources/application.yml index cae4a6f..00451f2 100644 --- a/auth-service-api/src/main/resources/application.yml +++ b/auth-service-api/src/main/resources/application.yml @@ -9,4 +9,4 @@ spring: enabled: false jwt.secret: "IHf3Yua/byvtA+iIcGWmkrLvpKEXTb5ClkXaZ0VDmYbr/6b1otCs38x68bidvZLAOB7anUtVQlCid6YDULO5XA==" jwt.expiration: 120000 -jwt.expiration-sec.refresh-token: 3600 +jwt.expiration-sec.refresh-token: 5