From 699dd0a3da15b9a097de3c3b3829b034848431d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johnny=20Miller=20=28=E9=94=BA=E4=BF=8A=29?= Date: Tue, 9 Feb 2021 09:49:10 +0800 Subject: [PATCH] perf($api-gateway): set Swagger ignored URL on Consul set Swagger ignored URL on Consul BREAKING CHANGE: refactor MafConfiguration.java; update configuration key --- .../WebFluxSecurityConfiguration.java | 3 + .../configuration/SwaggerConfiguration.java | 12 +++- .../SwaggerResourceProvider.java | 5 +- .../src/main/resources/application.yml | 9 +-- .../PermissionConfiguration.java | 3 +- .../src/main/resources/application.yml | 4 +- docker/config/api-gateway/application.yml | 9 +++ docker/config/auth-center/application.yml | 14 ++-- .../src/main/resources/application.yml | 4 +- muscle-mis/src/main/resources/application.yml | 17 +---- .../configuration/IgnoredUrl.java | 69 ------------------ .../configuration/MafConfiguration.java | 71 +++++++++++++++++++ .../src/main/resources/application.yml | 4 +- .../configuration/IgnoredUrl.java | 69 ------------------ .../configuration/MafConfiguration.java | 63 ++++++++++++++++ 15 files changed, 181 insertions(+), 175 deletions(-) create mode 100644 docker/config/api-gateway/application.yml delete mode 100644 reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/IgnoredUrl.java delete mode 100644 spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/IgnoredUrl.java diff --git a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/security/configuration/WebFluxSecurityConfiguration.java b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/security/configuration/WebFluxSecurityConfiguration.java index 05394bf6..26b91739 100644 --- a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/security/configuration/WebFluxSecurityConfiguration.java +++ b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/security/configuration/WebFluxSecurityConfiguration.java @@ -1,5 +1,6 @@ package com.jmsoftware.maf.apigateway.security.configuration; +import com.google.common.collect.Lists; import com.jmsoftware.maf.apigateway.remoteapi.AuthCenterRemoteApi; import com.jmsoftware.maf.apigateway.security.impl.*; import com.jmsoftware.maf.reactivespringcloudstarter.configuration.MafConfiguration; @@ -53,6 +54,8 @@ SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http, .csrf().disable() .build(); } + log.warn("Spring Security will ignore following URLs: {}", + Lists.newArrayList(mafConfiguration.flattenIgnoredUrls())); return http .cors().disable() .csrf().disable() diff --git a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerConfiguration.java b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerConfiguration.java index a5eae6ef..085a24c1 100644 --- a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerConfiguration.java +++ b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerConfiguration.java @@ -2,10 +2,13 @@ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; import java.util.Set; /** @@ -15,11 +18,14 @@ **/ @Data @Validated -@Component -@ConfigurationProperties(prefix = "maf.configuration.swagger") +@RefreshScope +@Configuration +@ConfigurationProperties(prefix = SwaggerConfiguration.PREFIX) public class SwaggerConfiguration { + public static final String PREFIX = "maf.configuration.swagger"; /** * Ignored service id set */ - private Set<@NotBlank String> ignoredServiceIdSet; + @NotEmpty + private Set<@NotBlank String> ignoredServiceIds; } diff --git a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerResourceProvider.java b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerResourceProvider.java index 2a7d36d8..8d0a8269 100644 --- a/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerResourceProvider.java +++ b/api-gateway/src/main/java/com/jmsoftware/maf/apigateway/universal/configuration/SwaggerResourceProvider.java @@ -1,7 +1,6 @@ package com.jmsoftware.maf.apigateway.universal.configuration; import cn.hutool.core.collection.CollUtil; -import com.google.common.collect.Sets; import com.jmsoftware.maf.reactivespringcloudstarter.configuration.MafProjectProperty; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -20,10 +19,8 @@ import springfox.documentation.swagger.web.SwaggerResource; import springfox.documentation.swagger.web.SwaggerResourcesProvider; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; -import java.util.Set; /** *

SwaggerResourceProvider

@@ -61,7 +58,7 @@ public List get() { val swaggerResourceList = new LinkedList(); routeLocator.getRoutes().subscribe(route -> { val serviceName = route.getUri().toString().substring(5).toLowerCase(); - if (!CollUtil.contains(swaggerConfiguration.getIgnoredServiceIdSet(), serviceName)) { + if (!CollUtil.contains(swaggerConfiguration.getIgnoredServiceIds(), serviceName)) { log.warn("{} found dynamic route. Service name: {}, route: {}", this.getClass().getSimpleName(), serviceName, route); val swaggerResource = new SwaggerResource(); diff --git a/api-gateway/src/main/resources/application.yml b/api-gateway/src/main/resources/application.yml index e2f9da3e..0591f8e8 100644 --- a/api-gateway/src/main/resources/application.yml +++ b/api-gateway/src/main/resources/application.yml @@ -3,6 +3,8 @@ server: tomcat: uri-encoding: @project.build.sourceEncoding@ shutdown: GRACEFUL + servlet: + context-path: spring: profiles: @@ -59,7 +61,7 @@ logging: maf: project-property: base-package: @project.groupId@ - context-path: + context-path: ${server.servlet.context-path} group-id: @project.groupId@ project-parent-artifact-id: @project.parent.artifactId@ project-artifact-id: @project.artifactId@ @@ -98,8 +100,3 @@ maf: - "/*/v2/api-docs/**" - "/webjars/**" - "/doc.html" - swagger: - ignored-service-id-set: - - "consul" - - "api-gateway" - - "spring-boot-admin" diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/permission/configuration/PermissionConfiguration.java b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/permission/configuration/PermissionConfiguration.java index 21ea9b44..73567962 100644 --- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/permission/configuration/PermissionConfiguration.java +++ b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/permission/configuration/PermissionConfiguration.java @@ -19,8 +19,9 @@ @Validated @RefreshScope @Configuration -@ConfigurationProperties(prefix = "permission") +@ConfigurationProperties(prefix = PermissionConfiguration.PREFIX) public class PermissionConfiguration { + public static final String PREFIX = "maf.configuration.permission"; @NotEmpty private Set<@NotBlank String> ignoredServiceIds; } diff --git a/auth-center/src/main/resources/application.yml b/auth-center/src/main/resources/application.yml index 7e36afd5..53b60fbf 100644 --- a/auth-center/src/main/resources/application.yml +++ b/auth-center/src/main/resources/application.yml @@ -3,6 +3,8 @@ server: tomcat: uri-encoding: @project.build.sourceEncoding@ shutdown: GRACEFUL + servlet: + context-path: spring: profiles: @@ -132,7 +134,7 @@ logging: maf: project-property: base-package: @project.groupId@ - context-path: + context-path: ${server.servlet.context-path} group-id: @project.groupId@ project-parent-artifact-id: @project.parent.artifactId@ project-artifact-id: @project.artifactId@ diff --git a/docker/config/api-gateway/application.yml b/docker/config/api-gateway/application.yml new file mode 100644 index 00000000..bc67d08b --- /dev/null +++ b/docker/config/api-gateway/application.yml @@ -0,0 +1,9 @@ +greeting: "Hello, World! From Consul config center!" + +maf: + configuration: + swagger: + ignored-service-ids: + - "consul" + - "api-gateway" + - "spring-boot-admin" diff --git a/docker/config/auth-center/application.yml b/docker/config/auth-center/application.yml index 8b55ac45..80887aad 100644 --- a/docker/config/auth-center/application.yml +++ b/docker/config/auth-center/application.yml @@ -1,8 +1,10 @@ greeting: "Hello, World! From Consul config center!" -permission: - ignored-service-ids: - - "consul" - - "api-gateway" - - "spring-boot-admin" - - "auth-center" +maf: + configuration: + permission: + ignored-service-ids: + - "consul" + - "api-gateway" + - "spring-boot-admin" + - "auth-center" diff --git a/exercise-mis/src/main/resources/application.yml b/exercise-mis/src/main/resources/application.yml index a8e88327..ef3497cd 100644 --- a/exercise-mis/src/main/resources/application.yml +++ b/exercise-mis/src/main/resources/application.yml @@ -3,6 +3,8 @@ server: tomcat: uri-encoding: @project.build.sourceEncoding@ shutdown: GRACEFUL + servlet: + context-path: spring: application: @@ -131,7 +133,7 @@ logging: maf: project-property: base-package: @project.groupId@ - context-path: + context-path: ${server.servlet.context-path} group-id: @project.groupId@ project-parent-artifact-id: @project.parent.artifactId@ project-artifact-id: @project.artifactId@ diff --git a/muscle-mis/src/main/resources/application.yml b/muscle-mis/src/main/resources/application.yml index 9d61b449..06633b99 100644 --- a/muscle-mis/src/main/resources/application.yml +++ b/muscle-mis/src/main/resources/application.yml @@ -3,6 +3,8 @@ server: tomcat: uri-encoding: @project.build.sourceEncoding@ shutdown: GRACEFUL + servlet: + context-path: spring: application: @@ -79,19 +81,6 @@ spring: max-wait: -1ms min-idle: 0 -eureka: - instance: - leaseRenewalIntervalInSeconds: 10 - health-check-url-path: /actuator/health - status-page-url-path: / - metadata-map: - # needed to trigger info and endpoint update after restart - startup: ${random.int} - instance-id: ${spring.cloud.client.ip-address}:${server.port}@${spring.cloud.client.hostname}@${spring.application.name}-${random.int} - prefer-ip-address: true - client: - registryFetchIntervalSeconds: 5 - feign: client: config: @@ -132,7 +121,7 @@ logging: maf: project-property: base-package: @project.groupId@ - context-path: + context-path: ${server.servlet.context-path} group-id: @project.groupId@ project-parent-artifact-id: @project.parent.artifactId@ project-artifact-id: @project.artifactId@ diff --git a/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/IgnoredUrl.java b/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/IgnoredUrl.java deleted file mode 100644 index 9060279d..00000000 --- a/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/IgnoredUrl.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.jmsoftware.maf.reactivespringcloudstarter.configuration; - -import com.google.common.collect.Lists; -import lombok.Data; - -import javax.validation.Valid; -import javax.validation.constraints.Pattern; -import java.util.List; - -/** - *

IgnoredUrl

- *

- * Ignored URL configuration. - * - * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com - * @date 5/2/20 11:41 PM - **/ -@Data -public class IgnoredUrl { - private interface Constant { - String URL_REGEXP = "^(/.+)+$"; - } - - /** - * Ignored URL pattern. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> pattern = Lists.newArrayList(); - /** - * Ignored GET request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> get = Lists.newArrayList(); - /** - * Ignored POST request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> post = Lists.newArrayList(); - /** - * Ignored DELETE request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> delete = Lists.newArrayList(); - /** - * Ignored PUT request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> put = Lists.newArrayList(); - /** - * Ignored HEAD request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> head = Lists.newArrayList(); - /** - * Ignored PATCH request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> patch = Lists.newArrayList(); - /** - * Ignored OPTIONS request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> options = Lists.newArrayList(); - /** - * Ignored TRACE request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> trace = Lists.newArrayList(); -} diff --git a/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/MafConfiguration.java b/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/MafConfiguration.java index 62e1e617..8f37bc9e 100644 --- a/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/MafConfiguration.java +++ b/reactive-spring-cloud-starter/src/main/java/com/jmsoftware/maf/reactivespringcloudstarter/configuration/MafConfiguration.java @@ -1,16 +1,21 @@ package com.jmsoftware.maf.reactivespringcloudstarter.configuration; import cn.hutool.core.util.ObjectUtil; +import com.google.common.collect.Lists; import lombok.Data; +import lombok.extern.slf4j.Slf4j; import lombok.val; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; +import javax.annotation.PostConstruct; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; import java.util.ArrayList; +import java.util.List; /** *

CustomConfiguration

@@ -21,6 +26,7 @@ * @date 2019-03-23 14:24 **/ @Data +@Slf4j @Validated @Component @ConfigurationProperties(prefix = "maf.configuration") @@ -72,4 +78,69 @@ public String[] flattenIgnoredUrls() { flattenIgnoredUrls.addAll(ignoredUrl.getPattern()); return flattenIgnoredUrls.toArray(new String[0]); } + + @PostConstruct + private void postConstruct() { + log.warn("Initial bean: '{}'", this.getClass().getSimpleName()); + } + + /** + *

IgnoredUrl

+ *

+ * Ignored URL configuration. + * + * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 2/9/2021 9:36 AM + **/ + @Data + public static class IgnoredUrl { + private interface Constant { + String URL_REGEXP = "^(/.+)+$"; + } + + /** + * Ignored URL pattern. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> pattern = Lists.newArrayList(); + /** + * Ignored GET request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> get = Lists.newArrayList(); + /** + * Ignored POST request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> post = Lists.newArrayList(); + /** + * Ignored DELETE request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> delete = Lists.newArrayList(); + /** + * Ignored PUT request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> put = Lists.newArrayList(); + /** + * Ignored HEAD request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> head = Lists.newArrayList(); + /** + * Ignored PATCH request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> patch = Lists.newArrayList(); + /** + * Ignored OPTIONS request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> options = Lists.newArrayList(); + /** + * Ignored TRACE request. + */ + @Valid + private List<@Pattern(regexp = IgnoredUrl.Constant.URL_REGEXP) String> trace = Lists.newArrayList(); + } } diff --git a/spring-boot-admin/src/main/resources/application.yml b/spring-boot-admin/src/main/resources/application.yml index 24c6f3c1..91d051bf 100644 --- a/spring-boot-admin/src/main/resources/application.yml +++ b/spring-boot-admin/src/main/resources/application.yml @@ -3,6 +3,8 @@ server: tomcat: uri-encoding: @project.build.sourceEncoding@ shutdown: GRACEFUL + servlet: + context-path: spring: boot: @@ -99,7 +101,7 @@ logging: maf: project-property: base-package: @project.groupId@ - context-path: + context-path: ${server.servlet.context-path} group-id: @project.groupId@ project-parent-artifact-id: @project.parent.artifactId@ project-artifact-id: @project.artifactId@ diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/IgnoredUrl.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/IgnoredUrl.java deleted file mode 100644 index 9ff5e074..00000000 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/IgnoredUrl.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.jmsoftware.maf.springcloudstarter.configuration; - -import com.google.common.collect.Lists; -import lombok.Data; - -import javax.validation.Valid; -import javax.validation.constraints.Pattern; -import java.util.List; - -/** - *

IgnoredUrl

- *

- * Ignored URL configuration. - * - * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com - * @date 5/2/20 11:41 PM - **/ -@Data -public class IgnoredUrl { - private interface Constant { - String URL_REGEXP = "^(/.+)+$"; - } - - /** - * Ignored URL pattern. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> pattern = Lists.newArrayList(); - /** - * Ignored GET request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> get = Lists.newArrayList(); - /** - * Ignored POST request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> post = Lists.newArrayList(); - /** - * Ignored DELETE request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> delete = Lists.newArrayList(); - /** - * Ignored PUT request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> put = Lists.newArrayList(); - /** - * Ignored HEAD request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> head = Lists.newArrayList(); - /** - * Ignored PATCH request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> patch = Lists.newArrayList(); - /** - * Ignored OPTIONS request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> options = Lists.newArrayList(); - /** - * Ignored TRACE request. - */ - @Valid - private List<@Pattern(regexp = Constant.URL_REGEXP) String> trace = Lists.newArrayList(); -} diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/MafConfiguration.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/MafConfiguration.java index e320ca57..1498cb84 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/MafConfiguration.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/MafConfiguration.java @@ -1,6 +1,7 @@ package com.jmsoftware.maf.springcloudstarter.configuration; import cn.hutool.core.util.ObjectUtil; +import com.google.common.collect.Lists; import lombok.Data; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -12,7 +13,9 @@ import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; import java.util.ArrayList; +import java.util.List; /** *

CustomConfiguration

@@ -90,4 +93,64 @@ public String[] flattenIgnoredUrls() { private void postConstruct() { log.warn("Initial bean: '{}'", this.getClass().getSimpleName()); } + + /** + *

IgnoredUrl

+ *

+ * Ignored URL configuration. + * + * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 2/9/2021 9:39 AM + **/ + @Data + public static class IgnoredUrl { + private interface Constant { + String URL_REGEXP = "^(/.+)+$"; + } + + /** + * Ignored URL pattern. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> pattern = Lists.newArrayList(); + /** + * Ignored GET request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> get = Lists.newArrayList(); + /** + * Ignored POST request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> post = Lists.newArrayList(); + /** + * Ignored DELETE request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> delete = Lists.newArrayList(); + /** + * Ignored PUT request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> put = Lists.newArrayList(); + /** + * Ignored HEAD request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> head = Lists.newArrayList(); + /** + * Ignored PATCH request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> patch = Lists.newArrayList(); + /** + * Ignored OPTIONS request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> options = Lists.newArrayList(); + /** + * Ignored TRACE request. + */ + @Valid + private List<@Pattern(regexp = Constant.URL_REGEXP) String> trace = Lists.newArrayList(); + } }