企業(yè)免費建站網(wǎng)站網(wǎng)站如何添加友情鏈接
需求描述:需要根據(jù)用戶的請求路徑攔截做權(quán)限控制:
但是這樣做全局異常無法捕獲
解決方案:
在filter當(dāng)中引入HandlerExceptionResolver類,通過該類的resolveException方法拋出自定義異常:
?
public class OpenInvokeFilter extends OncePerRequestFilter {@Autowiredprivate GaioAuthorizedProperties gaioAuthorizedProperties;@Autowired@Qualifier("handlerExceptionResolver")private HandlerExceptionResolver resolver;@Overrideprotected 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獲取匹配數(shù)據(jù),判斷當(dāng)前paasId是否有權(quán)限調(diào)用指定的serviceId,無權(quán)限則攔截處理。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);}}