美文网首页
关于springboot错误拦截器问题

关于springboot错误拦截器问题

作者: 三斤牛肉 | 来源:发表于2018-03-02 17:08 被阅读59次

    springboot当controller抛出异常时,会重定向到error地址(BasicErrorController),然后重新进入所有的拦截器,包括ExceptionHandler,此时如果拦截器有异常,会无法捕捉到真正的业务异常

    目前碰到的情况是这样的,我们定义了一个SessionFilter通过redis保存session,另有一个AuthInterceptorHandler处理登陆认证,一个
    @ControllerAdvice
    public class ExceptionController {
    private final Logger logger= LoggerFactory.getLogger(ExceptionController.class);

    @ExceptionHandler
    public CommonReturnVO handleException(Exception e){
        logger.error(e.getMessage(),e);
        if(e instanceof ServiceException){
            return  CommonReturnVO.fail(e.getMessage());
        }else if(e instanceof IllegalStateException) {
            return  CommonReturnVO.fail(e.getMessage());
        }else {
            return CommonReturnVO.fail("未知异常");
        }
    }
    

    }
    处理Exception
    当controller抛出异常时,springboot重定向到error地址,然后重新进入SessionFilter和AuthInterceptorHandler,而此时AuthInterceptorHandler中获得的request并非为我们包装过的保存redis的request(这里为什么是springboot原生的request而不是我们包装过的暂未可知),权限拦截失效,返回前端登陆校验失败。

    解决方法:
    在AuthInterceptorHandler的excludeParttern中加上error即可。

    相关文章

      网友评论

          本文标题:关于springboot错误拦截器问题

          本文链接:https://www.haomeiwen.com/subject/dtoaxftx.html