TO DO
Refresh Token Remaining Exception handler
Link to original
So in Exception Handler the exception are not going to the UserExceptions wait
package in.abhi8290.helloworld.core.exception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponseDto> handleGenericException(
Exception ex, WebRequest request) {
logger.error("Unexpected error occurred: ", ex);
logger.error("Caught in global: {}", ex.getClass().getSimpleName(), ex);
ErrorResponseDto errorResponse = new ErrorResponseDto(
"An unexpected error occurred",
"INTERNAL_SERVER_ERROR",
HttpStatus.INTERNAL_SERVER_ERROR.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}package in.abhi8290.helloworld.user.exception;
import in.abhi8290.helloworld.core.exception.ErrorResponseDto;
import in.abhi8290.helloworld.core.exception.GlobalExceptionHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
@RestControllerAdvice(assignableTypes = in.abhi8290.helloworld.user.UserController.class)
public class UserExceptionHandler extends GlobalExceptionHandler {
public final Logger logger = LoggerFactory.getLogger(UserExceptionHandler.class);
@ExceptionHandler(UserAlreadyExistsException.class)
public ResponseEntity<ErrorResponseDto> handleUserAlreadyExistsException(UserAlreadyExistsException ex, WebRequest request) {
logger.warn("User already exists: {}", ex.getMessage());
ErrorResponseDto errorResponse = new ErrorResponseDto(
ex.getMessage(),
"USER_ALREADY_EXISTS",
HttpStatus.CONFLICT.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.CONFLICT);
}
}
package in.abhi8290.helloworld.auth.exception;
import in.abhi8290.helloworld.core.exception.ErrorResponseDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import in.abhi8290.helloworld.core.exception.GlobalExceptionHandler;
@RestControllerAdvice(basePackages = "in.abhi8290.helloworld.auth")
public class AuthExceptionHandler extends GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(AuthExceptionHandler.class);
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ErrorResponseDto> handleUserNotFoundException(
UserNotFoundException ex, WebRequest request) {
logger.warn("User not found: {}", ex.getMessage());
ErrorResponseDto errorResponse = new ErrorResponseDto(
ex.getMessage(),
"USER_NOT_FOUND",
HttpStatus.NOT_FOUND.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(IncorrectPasswordException.class)
public ResponseEntity<ErrorResponseDto> handleIncorrectPasswordException(
IncorrectPasswordException ex, WebRequest request) {
logger.warn("Authentication failed: {}", ex.getMessage());
ErrorResponseDto errorResponse = new ErrorResponseDto(
ex.getMessage(),
"INVALID_CREDENTIALS",
HttpStatus.UNAUTHORIZED.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.UNAUTHORIZED);
}
}But the Auth Exception Works So there’s an issue I have no idea why
So lets Understand the flow
I am still unsure how to do this so i moved all the error to global Error Handler
package in.abhi8290.helloworld.core.exception;
import in.abhi8290.helloworld.auth.exception.IncorrectPasswordException;
import in.abhi8290.helloworld.auth.exception.UserNotFoundException;
import in.abhi8290.helloworld.core.exception.common.InvalidTokenError;
import in.abhi8290.helloworld.user.exception.UserAlreadyExistsException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
@RestControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponseDto> handleGenericException(
Exception ex, WebRequest request) {
logger.error("Unexpected error occurred: ", ex);
logger.error("Caught in global: {}", ex.getClass().getSimpleName(), ex);
ErrorResponseDto errorResponse = new ErrorResponseDto(
"An unexpected error occurred Bruh ",
"INTERNAL_SERVER_ERROR",
HttpStatus.INTERNAL_SERVER_ERROR.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ErrorResponseDto> handleUserNotFoundException(
UserNotFoundException ex, WebRequest request) {
logger.warn("User not found: {}", ex.getMessage());
ErrorResponseDto errorResponse = new ErrorResponseDto(
ex.getMessage(),
"USER_NOT_FOUND",
HttpStatus.NOT_FOUND.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(IncorrectPasswordException.class)
public ResponseEntity<ErrorResponseDto> handleIncorrectPasswordException(
IncorrectPasswordException ex, WebRequest request) {
logger.warn("Authentication failed: {}", ex.getMessage());
ErrorResponseDto errorResponse = new ErrorResponseDto(
ex.getMessage(),
"INVALID_CREDENTIALS",
HttpStatus.UNAUTHORIZED.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.UNAUTHORIZED);
}
@ExceptionHandler(UserAlreadyExistsException.class)
public ResponseEntity<ErrorResponseDto> handleUserAlreadyExistsException(
UserAlreadyExistsException ex, WebRequest request) {
logger.warn("User already exists: {}", ex.getMessage());
ErrorResponseDto errorResponse = new ErrorResponseDto(
ex.getMessage(),
"USER_ALREADY_EXISTS",
HttpStatus.CONFLICT.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.CONFLICT);
}
@ExceptionHandler(InvalidTokenError.class)
public ResponseEntity<ErrorResponseDto> handleInvalidTokenException(InvalidTokenError ex, WebRequest request) {
logger.warn("Invalid token: {}", ex.getMessage());
ErrorResponseDto errorResponse = new ErrorResponseDto(
ex.getMessage(),
"INVALID_TOKEN",
HttpStatus.UNAUTHORIZED.value()
);
return new ResponseEntity<>(errorResponse, HttpStatus.CONFLICT);
}
}So What is done
- Handle Exceptions In Spring Boot
- Refresh Token
So Let’s Make the Auth Service
- Username Password login
- google login
- github login
- signout
- refresh token
- oauth
Today by 4pm