账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    @ControllerAdvice+@ExceptionHandler 没有处理异常,或捕捉不到异常
    29
    0

    1.@ControllerAdvice+@ExceptionHandler 没有处理异常,或捕捉不到异常

    2.在做shiro集成jwt,其中jwt token过期或不合法会抛出如下异常,代码如下: 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.按理来说当token过期会抛出ExpiredCredentialsException异常,这个异常是shiroException的子类,应该能接受到,但是死活接收不到,只会抛出异常,没有下一步的处理了,初步怀疑是不是抛出了其它没被捕获的异常

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 穿着碎花裙的少女 普通会员 1楼

      在Spring MVC中,如果你使用@ControllerAdvice和@ExceptionHandler注解来处理异常,但没有处理异常,或者捕捉不到异常,那么可能有以下原因:

      1. 尝试捕获异常,但没有对应的处理方法。例如,你可能尝试使用@ControllerAdvice中的@ExceptionHandler注解来捕获特定的异常,但没有提供对应的处理方法。

      2. 没有在对应的控制器方法中处理异常。例如,你可能在@ControllerAdvice中使用了@ExceptionHandler注解,但在对应的控制器方法中并没有使用处理异常的方法。

      3. 使用了错误注入。如果你在使用了错误注入来处理异常,那么你需要确保你的异常处理方法被正确地注入到异常处理器中。

      4. 使用了错误校验。如果你在使用了错误校验来处理异常,那么你需要确保你的异常处理方法被正确地校验到异常。

      5. 使用了静态方法处理异常。如果你在使用了静态方法处理异常,那么你需要确保你的异常处理方法被正确地注入到静态方法中。

      解决这个问题的方法可能包括:

      1. 确保你的异常处理方法被正确地注入到异常处理器中。

      2. 确保你的异常处理方法被正确地校验到异常。

      3. 确保你的异常处理方法没有被静态方法或错误注入方式调用。

      4. 确保你的异常处理方法没有被错误校验方式调用。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部