需求描述:需要根据用户的请求路径拦截做权限控制:

但是这样做全局异常无法捕获
解决方案:
在filter当中引入HandlerExceptionResolver类,通过该类的resolveException方法抛出自定义异常:

public class OpenInvokeFilter extends OncePerRequestFilter {
@Autowired
private GaioAuthorizedProperties gaioAuthorizedProperties;
@Autowired
@Qualifier("handlerExceptionResolver")
private HandlerExceptionResolver resolver;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
boolean containsUri = request.getRequestURI().contains("/open/invoke");
if (containsUri) {
String paasid = request.getHeader("x-tif-paasid");
String serviceId = request.getHeader("x-smp-serviceid");
if (StringUtils.isNotBlank(paasid)) {
// 从yml获取匹配数据,判断当前paasId是否有权限调用指定的serviceId,无权限则拦截处理。
AccessProperties accessProperties = gaioAuthorizedProperties.getType().get("ebus");
Map<String, String[]> passServiceMap = accessProperties.getPassServiceMap();
String[] serviceIds = passServiceMap.get(paasid);
if (serviceIds == null) {
resolver.resolveException(request, response,
null, new GaioBizException(RESOURCE_NOT_FOUND_ERROR));
return;
}
boolean match = Arrays.stream(serviceIds).anyMatch(item -> item.equals(serviceId));
if (!match) {
resolver.resolveException(request, response,
null, new GaioBizException(RESOURCE_NOT_FOUND_ERROR));
return;
}
}
}
chain.doFilter(request, response);
}
}













![2023年中国改性聚乙烯产能、产量及市场规模现状分析[图]](https://img-blog.csdnimg.cn/img_convert/8dc35a1941a21d7fdfa34cc75ab13618.png)
![[12 种安卓数据恢复方案] 最佳免费 Android 照片恢复工具榜单](https://img-blog.csdnimg.cn/img_convert/fd15a460a99b31013b28d5b2eb354bea.jpeg)




