关于springboot错误拦截器问题

2018-03-02  本文已影响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即可。

上一篇下一篇

猜你喜欢

热点阅读