diff --git a/server/odc-server/src/main/java/com/oceanbase/odc/server/config/MvcConfiguration.java b/server/odc-server/src/main/java/com/oceanbase/odc/server/config/MvcConfiguration.java index c4dff7be4c..482408a47c 100644 --- a/server/odc-server/src/main/java/com/oceanbase/odc/server/config/MvcConfiguration.java +++ b/server/odc-server/src/main/java/com/oceanbase/odc/server/config/MvcConfiguration.java @@ -15,11 +15,25 @@ */ package com.oceanbase.odc.server.config; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties; +import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType; +import org.springframework.boot.actuate.endpoint.ExposableEndpoint; +import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver; +import org.springframework.boot.actuate.endpoint.web.EndpointMapping; +import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes; +import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint; +import org.springframework.boot.actuate.endpoint.web.WebEndpointsSupplier; +import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier; +import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier; +import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.web.servlet.ConditionalOnMissingFilterBean; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -28,6 +42,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; +import org.springframework.core.env.Environment; import org.springframework.format.FormatterRegistry; import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; import org.springframework.http.MediaType; @@ -269,6 +284,27 @@ public FilterRegistrationBean shallowEtagHeaderFilter() return filterRegistrationBean; } + @Bean + public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping( + WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, + ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, + CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, + Environment environment) { + List> allEndpoints = new ArrayList<>(); + Collection webEndpoints = webEndpointsSupplier.getEndpoints(); + allEndpoints.addAll(webEndpoints); + allEndpoints.addAll(servletEndpointsSupplier.getEndpoints()); + allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints()); + String basePath = webEndpointProperties.getBasePath(); + EndpointMapping endpointMapping = new EndpointMapping(basePath); + boolean shouldRegisterLinksMapping = webEndpointProperties.getDiscovery().isEnabled() && + (org.springframework.util.StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals( + ManagementPortType.DIFFERENT)); + return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, + corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), + shouldRegisterLinksMapping, null); + } + private String getIndexPageLocation() { if (StringUtils.isNotBlank(indexPage)) { log.info("ODC_INDEX_PAGE_URI set, will use cdn version, indexPage={}", indexPage); diff --git a/server/odc-server/src/main/resources/config/application.yml b/server/odc-server/src/main/resources/config/application.yml index 7afa094517..83359ac3a2 100644 --- a/server/odc-server/src/main/resources/config/application.yml +++ b/server/odc-server/src/main/resources/config/application.yml @@ -7,6 +7,8 @@ spring: proxy-target-class: true mvc: throw-exception-if-no-handler-found: true + pathmatch: + matching-strategy: ant_path_matcher servlet: multipart: max-file-size: 2048MB diff --git a/server/odc-service/src/main/resources/config-meta/user-config-meta.yml b/server/odc-service/src/main/resources/config-meta/user-config-meta.yml index 4cc3490ac3..8957e52f2c 100644 --- a/server/odc-service/src/main/resources/config-meta/user-config-meta.yml +++ b/server/odc-service/src/main/resources/config-meta/user-config-meta.yml @@ -148,7 +148,7 @@ max_value: ~ min_value: ~ allowed_values: [ 'TEAM','INDIVIDUAL' ] - default_value: 'TEAM' + default_value: 'INDIVIDUAL' nullable: false description: '' - id: 16