拦截器自定义异常返回给调用方

325 阅读1分钟

问题来源

服务上新环境,增加权限校验功能。需要在每个接口添加权限校验,由于本服务不涉及数据库,需要在每个接口调用另一个微服务,并将调用方的参数传过去,判断是否有权限

一次解决方案

本来很简单的一个需求,但苦于针对拦截的情况不会返回给上游我们自定义的错误信息,而业务又上线紧急,就先建了一个公共方法,在每个接口的入口调用一次。

二次方案

先直接上,有空再填

定义拦截内容

@Slf4j
public class AuthenticationInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Response resp = myAuthMethod(request);
        if (!Response.SUCCESS.equals(resp.getStatus())) {
            try (PrintWriter writer = response.getWriter()) {
                writer.write(JacksonUtil.bean2Json(resp));
                writer.flush();
                writer.close();
                return false;
            }
        }
        return true;
    }
}

使定义的拦截器生效

@Configuration
@Slf4j
public class Interceptor implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        AuthenticationInterceptor auth = new AuthenticationInterceptor();
        registry.addInterceptor(auth).addPathPatterns("/**");
    }

}