implement json exception handling
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
4990b5b92c
commit
5bd9ff42ec
@ -0,0 +1,61 @@
|
||||
package wtf.beatrice.releasehive.exceptions;
|
||||
|
||||
import io.jsonwebtoken.ExpiredJwtException;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.http.HttpStatusCode;
|
||||
import org.springframework.http.ProblemDetail;
|
||||
import org.springframework.security.authentication.AccountStatusException;
|
||||
import org.springframework.security.authentication.BadCredentialsException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import java.nio.file.AccessDeniedException;
|
||||
import java.security.SignatureException;
|
||||
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandler
|
||||
{
|
||||
private static final Logger LOGGER = LogManager.getLogger(GlobalExceptionHandler.class);
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
public ProblemDetail handleSecurityException(Exception exception) {
|
||||
ProblemDetail errorDetail = null;
|
||||
|
||||
LOGGER.error(exception);
|
||||
|
||||
if (exception instanceof BadCredentialsException) {
|
||||
errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(401), exception.getMessage());
|
||||
errorDetail.setProperty("description", "Invalid email or password");
|
||||
|
||||
return errorDetail;
|
||||
}
|
||||
|
||||
if (exception instanceof AccountStatusException) {
|
||||
errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(403), exception.getMessage());
|
||||
errorDetail.setProperty("description", "Account locked");
|
||||
}
|
||||
|
||||
if (exception instanceof AccessDeniedException) {
|
||||
errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(403), exception.getMessage());
|
||||
errorDetail.setProperty("description", "You are not authorized to access this resource");
|
||||
}
|
||||
|
||||
if (exception instanceof SignatureException) {
|
||||
errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(403), exception.getMessage());
|
||||
errorDetail.setProperty("description", "Invalid JWT signature");
|
||||
}
|
||||
|
||||
if (exception instanceof ExpiredJwtException) {
|
||||
errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(403), exception.getMessage());
|
||||
errorDetail.setProperty("description", "Expired JWT token");
|
||||
}
|
||||
|
||||
if (errorDetail == null) {
|
||||
errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(500), exception.getMessage());
|
||||
errorDetail.setProperty("description", "Internal server error");
|
||||
}
|
||||
|
||||
return errorDetail;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user