diff --git a/src/main/java/org/decepticons/linkshortener/api/security/jwt/JwtTokenUtil.java b/src/main/java/org/decepticons/linkshortener/api/security/jwt/JwtTokenUtil.java index 29d758f..293538f 100644 --- a/src/main/java/org/decepticons/linkshortener/api/security/jwt/JwtTokenUtil.java +++ b/src/main/java/org/decepticons/linkshortener/api/security/jwt/JwtTokenUtil.java @@ -11,6 +11,7 @@ import java.util.HashMap; import java.util.Map; import java.util.function.Function; +import org.decepticons.linkshortener.api.exception.InvalidTokenException; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; @@ -92,7 +93,7 @@ public boolean validateToken( final String username = extractUsername(token); return (username.equals(userDetails.getUsername()) && !isTokenExpired(token)); - } catch (JwtException | IllegalArgumentException e) { + } catch (InvalidTokenException e) { return false; } } @@ -162,13 +163,17 @@ private String createToken( * @param token the JWT token * @return the claims */ - private Claims extractAllClaims(final String token) { - return Jwts.parserBuilder() - .setSigningKey(signingKey) - .build() - .parseClaimsJws(token) - .getBody(); + try { + return Jwts.parserBuilder() + .setSigningKey(signingKey) + .build() + .parseClaimsJws(token) + .getBody(); + } catch (JwtException | IllegalArgumentException ex) { + throw new InvalidTokenException( + "Invalid token provided during claims extraction.", ex); + } } /** diff --git a/src/main/java/org/decepticons/linkshortener/api/v1/controller/unversioned/GlobalExceptionHandlerController.java b/src/main/java/org/decepticons/linkshortener/api/v1/controller/unversioned/GlobalExceptionHandlerController.java index 0c61b9b..b613792 100644 --- a/src/main/java/org/decepticons/linkshortener/api/v1/controller/unversioned/GlobalExceptionHandlerController.java +++ b/src/main/java/org/decepticons/linkshortener/api/v1/controller/unversioned/GlobalExceptionHandlerController.java @@ -224,5 +224,25 @@ public ResponseEntity> handleShortLinkOutOfDate( ); } + /** + * Handles exceptions for bad login credentials. + * + * @param ex The BadCredentialsException instance. + * @return A ResponseEntity with an UNAUTHORIZED status. + */ + @ExceptionHandler( + org.springframework.security.authentication + .BadCredentialsException.class + ) + public ResponseEntity> handleBadCredentials( + final org.springframework.security.authentication + .BadCredentialsException ex + ) { + return buildErrorResponseSecurity( + HttpStatus.UNAUTHORIZED, + "Invalid Credentials", + ex.getMessage()); + } + }