diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java index 37b9517c6..a67de7f27 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java @@ -19,6 +19,7 @@ package com.alibaba.cloud.appactive.provider; import java.util.List; import javax.annotation.PostConstruct; +import javax.servlet.Filter; import com.alibaba.cloud.nacos.registry.NacosRegistration; @@ -33,7 +34,7 @@ import org.springframework.context.annotation.Configuration; public class NacosAutoConfig { @Autowired - private List<FilterRegistrationBean> beanList; + private List<FilterRegistrationBean<? extends Filter>> beanList; @Autowired(required = false) private NacosRegistration nacosRegistration; diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java index 117718d2d..d4bae51ab 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java @@ -36,6 +36,7 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean; /** * @author raozihao, mageekchiu * @author <a href="mailto:zihaorao@gmail.com">Steve</a> + * @author <a href="mailto:1262917629@qq.com">RovingSea</a> */ public final class URIRegister { @@ -46,68 +47,85 @@ public final class URIRegister { private URIRegister() { } - public static void collectUris(List<FilterRegistrationBean> filterRegistrationBeans) { - if (CollectionUtils.isNotEmpty(filterRegistrationBeans)) { - List<ServiceMeta> serviceMetaList = new LinkedList<>(); - boolean hasWildChar = false; - for (FilterRegistrationBean filterRegistrationBean : filterRegistrationBeans) { - Filter filter = filterRegistrationBean.getFilter(); - if (filter == null) { - continue; - } - if (filter instanceof CoreServiceFilter) { - Collection<String> urlPatterns = filterRegistrationBean - .getUrlPatterns(); - for (String urlPattern : urlPatterns) { - if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { - hasWildChar = true; - } - ServiceMeta serviceMeta = new ServiceMeta(urlPattern, - ResourceActiveType.UNIT_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - } - else if (filter instanceof GlobalServiceFilter) { - Collection<String> urlPatterns = filterRegistrationBean - .getUrlPatterns(); - for (String urlPattern : urlPatterns) { - if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { - hasWildChar = true; - } - ServiceMeta serviceMeta = new ServiceMeta(urlPattern, - ResourceActiveType.CENTER_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - } - else if (filter instanceof GeneralServiceFilter) { - Collection<String> urlPatterns = filterRegistrationBean - .getUrlPatterns(); - for (String urlPattern : urlPatterns) { - if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { - hasWildChar = true; - } - ServiceMeta serviceMeta = new ServiceMeta(urlPattern, - ResourceActiveType.NORMAL_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - } + public static void collectUris(List<FilterRegistrationBean<? extends Filter>> beanList) { + if (CollectionUtils.isEmpty(beanList)) { + return; + } + List<ServiceMeta> serviceMetaList = new LinkedList<>(); + boolean hasWildChar = false; + for (FilterRegistrationBean<? extends Filter> filterRegistrationBean : beanList) { + Filter filter = filterRegistrationBean.getFilter(); + if (filter == null) { + continue; } - if (CollectionUtils.isNotEmpty(serviceMetaList)) { - if (!hasWildChar) { - // 保证所有 service(app+uri) 都纳入管理,不然不好做缓存管理 - ServiceMeta serviceMeta = new ServiceMeta(MATCH_ALL, - ResourceActiveType.NORMAL_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - serviceMetaObject = new ServiceMetaObject(); - Collections.sort(serviceMetaList); - serviceMetaObject.setServiceMetaList(serviceMetaList); - String meta = JSON.toJSONString(serviceMetaList); - serviceMetaObject.setMeta(meta); - String md5 = DigestUtils.md5Hex(meta.getBytes(StandardCharsets.UTF_8)); - serviceMetaObject.setMd5OfList(md5); + Collection<String> urlPatterns = filterRegistrationBean.getUrlPatterns(); + if (filter instanceof CoreServiceFilter) { + hasWildChar = collectServiceMetas(serviceMetaList, hasWildChar, urlPatterns, + ResourceActiveType.UNIT_RESOURCE_TYPE); + } else if (filter instanceof GlobalServiceFilter) { + hasWildChar = collectServiceMetas(serviceMetaList, hasWildChar, urlPatterns, + ResourceActiveType.CENTER_RESOURCE_TYPE); + } else if (filter instanceof GeneralServiceFilter) { + hasWildChar = collectServiceMetas(serviceMetaList, hasWildChar, urlPatterns, + ResourceActiveType.NORMAL_RESOURCE_TYPE); } } + if (CollectionUtils.isEmpty(serviceMetaList)) { + return; + } + if (!hasWildChar) { + // 保证所有 service(app+uri) 都纳入管理,不然不好做缓存管理 + collectServiceMeta(serviceMetaList, MATCH_ALL, ResourceActiveType.NORMAL_RESOURCE_TYPE); + } + initServiceMetaObject(serviceMetaList); + } + + /** + * Initialize {@link #serviceMetaObject} based on {@link ServiceMeta} list. + * @param serviceMetaList list needed for initialization + */ + private static void initServiceMetaObject(List<ServiceMeta> serviceMetaList) { + serviceMetaObject = new ServiceMetaObject(); + Collections.sort(serviceMetaList); + serviceMetaObject.setServiceMetaList(serviceMetaList); + String meta = JSON.toJSONString(serviceMetaList); + serviceMetaObject.setMeta(meta); + String md5 = DigestUtils.md5Hex(meta.getBytes(StandardCharsets.UTF_8)); + serviceMetaObject.setMd5OfList(md5); + } + + /** + * Collect {@link ServiceMeta} into the given <i>serviceMetaList</i> according to + * each item of the given <i>urlPatterns</i> and the given <i>resourceActiveType</i>, + * finally determine whether <i>hasWildChar</i> is a new wildChar. + * @param serviceMetaList extended list + * @param hasWildChar keyword to be determined + * @param urlPatterns looped list + * @param resourceActiveType attribute of {@link ServiceMeta} + * @return is new wildChar + */ + private static boolean collectServiceMetas(List<ServiceMeta> serviceMetaList, boolean hasWildChar, + Collection<String> urlPatterns, String resourceActiveType) { + for (String urlPattern : urlPatterns) { + if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { + hasWildChar = true; + } + collectServiceMeta(serviceMetaList, urlPattern, resourceActiveType); + } + return hasWildChar; + } + + /** + * Collect {@link ServiceMeta} into the given <i>serviceMetaList</i> according to + * the given <i>urlPattern</i> and the given <i>resourceActiveType</i>. + * @param serviceMetaList extended list + * @param urlPattern attribute of {@link ServiceMeta} + * @param resourceActiveType attribute of {@link ServiceMeta} + */ + private static void collectServiceMeta(List<ServiceMeta> serviceMetaList, String urlPattern, + String resourceActiveType) { + ServiceMeta serviceMeta = new ServiceMeta(urlPattern, resourceActiveType); + serviceMetaList.add(serviceMeta); } public static ServiceMetaObject getServiceMetaObject() {