问题来源
服务上新环境,增加权限校验功能。需要在每个接口添加权限校验,由于本服务不涉及数据库,需要在每个接口调用另一个微服务,并将调用方的参数传过去,判断是否有权限
一次解决方案
本来很简单的一个需求,但苦于针对拦截的情况不会返回给上游我们自定义的错误信息,而业务又上线紧急,就先建了一个公共方法,在每个接口的入口调用一次。
二次方案
先直接上,有空再填
定义拦截内容
@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("/**");
}
}