1.@ControllerAdvice+@ExceptionHandler does not handle exceptions, or cannot catch exceptions
2. When shiro integration jwt is being done, the following exception is thrown when jwt token expires or is illegal. The code is as follows: public static void verify (String token, String userId, String secret) {
try {
Algorithm algorithm = Algorithm.HMAC256(secret);
JWTVerifier verifier = JWT.require(algorithm).withClaim(userPrimaryKey, userId).build();
verifier.verify(token);
} catch (TokenExpiredException exception) {
log.info("token ,:{}", token);
throw new ExpiredCredentialsException(EnumErrorCode.apiAuthorizationExpired.getMsg());
}catch (InvalidClaimException exception2){
log.info("token ,:{}", token);
throw new AuthenticationException(EnumErrorCode.apiAuthorizationInvalid.getMsg());
}catch (Exception exception3){
log.info("token :{}", token);
throw new IFastApiException(EnumErrorCode.apiAuthorizationInvalid.getCodeStr());
}
}
@RestControllerAdvice()
@ExceptionHandler(ShiroException.class)
public Result<String> handleAuthorizationException(ShiroException e) {
log.error(e.getMessage());
if(e instanceof IncorrectCredentialsException) {
return Result.build(EnumErrorCode.apiAuthorizationFailed.getCode(), EnumErrorCode.apiAuthorizationFailed.getMsg());
}else if(e instanceof ExpiredCredentialsException) {
return Result.build(EnumErrorCode.apiAuthorizationExpired.getCode(), EnumErrorCode.apiAuthorizationExpired.getMsg());
}
return Result.build(EnumErrorCode.notAuthorization.getCode(), EnumErrorCode.notAuthorization.getMsg());
}
3. According to theory, when token expires, an ExpiredCredentialsException exception will be thrown. This exception is a subclass of shiroException and should be accepted, but it will only be thrown if it is not received alive or dead. There is no further processing. Preliminary doubt whether other uncaught exceptions have been thrown
.