This is an automated email from the ASF dual-hosted git repository.

jinmeiliao pushed a commit to branch support/1.15
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/support/1.15 by this push:
     new 62f8dbce38 GEODE-10312: Fix the v1/v3 mismatch. (#7720)
62f8dbce38 is described below

commit 62f8dbce3848a8feb14021fe992a5d5f1fd3fb82
Author: Patrick Johnson <[email protected]>
AuthorDate: Tue May 31 18:33:58 2022 -0700

    GEODE-10312: Fix the v1/v3 mismatch. (#7720)
    
    * Remove SpringBootApplication annotation from swagger APIs.
    * Change v1 to v3 in swagger api-docs URLs.
    
    (cherry picked from commit eedbe293d4b96839ea192c88c479c3e92de52ef8)
---
 .../management/JQFilterVerificationDUnitTest.java  |  2 +-
 ...eveloperRestSecurityConfigurationDUnitTest.java |  8 ++--
 ...nagementRestSecurityConfigurationDUnitTest.java |  8 ++--
 ...aggerManagementVerificationIntegrationTest.java |  2 +-
 .../DevRestSwaggerVerificationIntegrationTest.java |  2 +-
 .../web/security/RestSecurityConfiguration.java    |  4 +-
 .../internal/web/swagger/config/SwaggerConfig.java | 47 +++++++++++++++++---
 .../src/main/resources/swagger.properties          |  4 +-
 .../rest/security/RestSecurityConfiguration.java   |  6 +--
 .../internal/rest/swagger/SwaggerConfig.java       | 50 +++++++++++++++++++---
 .../main/resources/swagger-management.properties   |  4 +-
 11 files changed, 107 insertions(+), 30 deletions(-)

diff --git 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/JQFilterVerificationDUnitTest.java
 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/JQFilterVerificationDUnitTest.java
index 5312d97771..e10dccbc23 100644
--- 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/JQFilterVerificationDUnitTest.java
+++ 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/JQFilterVerificationDUnitTest.java
@@ -96,7 +96,7 @@ public class JQFilterVerificationDUnitTest {
 
     client = new GeodeDevRestClient("/management", "localhost", 
locator.getHttpPort(), false);
     JsonNode jsonObject =
-        client.doGetAndAssert("/v1/api-docs").getJsonObject().get("paths");
+        client.doGetAndAssert("/v3/api-docs").getJsonObject().get("paths");
     Iterator<Map.Entry<String, JsonNode>> urls = jsonObject.fields();
     while (urls.hasNext()) {
       Map.Entry<String, JsonNode> url = urls.next();
diff --git 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/DeveloperRestSecurityConfigurationDUnitTest.java
 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/DeveloperRestSecurityConfigurationDUnitTest.java
index b9c9314f53..574ffb7875 100644
--- 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/DeveloperRestSecurityConfigurationDUnitTest.java
+++ 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/DeveloperRestSecurityConfigurationDUnitTest.java
@@ -42,11 +42,11 @@ public class DeveloperRestSecurityConfigurationDUnitTest {
 
     // Unsecured no credentials
     assertResponse(client.doGet("/swagger-ui.html", null, 
null)).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", null, 
null)).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", null, 
null)).hasStatusCode(200);
 
     // unsecured with credentials
     assertResponse(client.doGet("/swagger-ui.html", "cluster", 
"cluster")).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
 
     // secured with credentials
     assertResponse(client.doGet("/v1", "data", "data")).hasStatusCode(200);
@@ -67,11 +67,11 @@ public class DeveloperRestSecurityConfigurationDUnitTest {
 
     // Unsecured no credentials
     assertResponse(client.doGet("/swagger-ui.html", null, 
null)).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", null, 
null)).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", null, 
null)).hasStatusCode(200);
 
     // unsecured with credentials
     assertResponse(client.doGet("/swagger-ui.html", "cluster", 
"cluster")).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
 
     // secured with credentials
     assertResponse(client.doGet("/v1", "data", "data")).hasStatusCode(200);
diff --git 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ManagementRestSecurityConfigurationDUnitTest.java
 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ManagementRestSecurityConfigurationDUnitTest.java
index 43593c0025..ba26a599a1 100644
--- 
a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ManagementRestSecurityConfigurationDUnitTest.java
+++ 
b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ManagementRestSecurityConfigurationDUnitTest.java
@@ -41,11 +41,11 @@ public class ManagementRestSecurityConfigurationDUnitTest {
 
     // Unsecured no credentials
     assertResponse(client.doGet("/swagger-ui.html", null, 
null)).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", null, 
null)).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", null, 
null)).hasStatusCode(200);
 
     // unsecured with credentials
     assertResponse(client.doGet("/swagger-ui.html", "cluster", 
"cluster")).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
 
     // secured with credentials
     assertResponse(client.doGet("/v1/regions", "cluster", 
"cluster")).hasStatusCode(200);
@@ -66,11 +66,11 @@ public class ManagementRestSecurityConfigurationDUnitTest {
 
     // Unsecured no credentials
     assertResponse(client.doGet("/swagger-ui.html", null, 
null)).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", null, 
null)).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", null, 
null)).hasStatusCode(200);
 
     // unsecured with credentials
     assertResponse(client.doGet("/swagger-ui.html", "cluster", 
"cluster")).hasStatusCode(200);
-    assertResponse(client.doGet("/v1/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
+    assertResponse(client.doGet("/v3/api-docs", "cluster", 
"cluster")).hasStatusCode(200);
 
     // secured with credentials
     assertResponse(client.doGet("/v1/regions", "cluster", 
"cluster")).hasStatusCode(200);
diff --git 
a/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/rest/SwaggerManagementVerificationIntegrationTest.java
 
b/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/rest/SwaggerManagementVerificationIntegrationTest.java
index 5b13b5b89c..4c81345c62 100644
--- 
a/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/rest/SwaggerManagementVerificationIntegrationTest.java
+++ 
b/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/rest/SwaggerManagementVerificationIntegrationTest.java
@@ -55,7 +55,7 @@ public class SwaggerManagementVerificationIntegrationTest {
 
     // Check the JSON
     JsonNode json =
-        
assertResponse(client.get("/management/v1/api-docs")).hasStatusCode(200)
+        
assertResponse(client.get("/management/v3/api-docs")).hasStatusCode(200)
             .getJsonObject();
     assertThat(json.get("openapi").asText(), is("3.0.1"));
 
diff --git 
a/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/DevRestSwaggerVerificationIntegrationTest.java
 
b/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/DevRestSwaggerVerificationIntegrationTest.java
index beca1aa57a..e543020fad 100644
--- 
a/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/DevRestSwaggerVerificationIntegrationTest.java
+++ 
b/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/DevRestSwaggerVerificationIntegrationTest.java
@@ -52,7 +52,7 @@ public class DevRestSwaggerVerificationIntegrationTest {
 
     // Check the JSON
     JsonNode json =
-        assertResponse(client.get("/geode/v1/api-docs")).hasStatusCode(200)
+        assertResponse(client.get("/geode/v3/api-docs")).hasStatusCode(200)
             .getJsonObject();
     assertThat(json.get("openapi").asText(), is("3.0.1"));
 
diff --git 
a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/security/RestSecurityConfiguration.java
 
b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/security/RestSecurityConfiguration.java
index d3e3be11b1..28ce4b4620 100644
--- 
a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/security/RestSecurityConfiguration.java
+++ 
b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/security/RestSecurityConfiguration.java
@@ -53,9 +53,9 @@ public class RestSecurityConfiguration extends 
WebSecurityConfigurerAdapter {
 
     
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
         .authorizeRequests()
-        .antMatchers("/docs/**", "/swagger-ui.html", "/swagger-ui/index.html",
+        .antMatchers("/docs/**", "/swagger-ui.html", "/swagger-ui/index.html", 
"/swagger-ui/**",
             Links.URI_VERSION + "/api-docs/**", 
"/webjars/springdoc-openapi-ui/**",
-            "/swagger-resources/**")
+            "/v3/api-docs/**", "/swagger-resources/**")
         .permitAll().and().csrf().disable();
 
     if (authProvider.getSecurityService().isIntegratedSecurity()) {
diff --git 
a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java
 
b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java
index a186611632..563971becf 100644
--- 
a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java
+++ 
b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/swagger/config/SwaggerConfig.java
@@ -15,22 +15,59 @@
 package org.apache.geode.rest.internal.web.swagger.config;
 
 
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
 import io.swagger.v3.oas.models.info.License;
 import org.springdoc.core.GroupedOpenApi;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration;
-import 
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.PropertySource;
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.WebApplicationContext;
+import 
org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.servlet.DispatcherServlet;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 
 
 @PropertySource({"classpath:swagger.properties"})
-@SpringBootApplication(exclude = {TransactionAutoConfiguration.class, 
LdapAutoConfiguration.class})
+@EnableWebMvc
+@Configuration("swaggerConfigApi")
+@ComponentScan(basePackages = {"org.springdoc"})
 @SuppressWarnings("unused")
-public class SwaggerConfig {
+public class SwaggerConfig implements WebApplicationInitializer {
+
+  @Override
+  public void onStartup(ServletContext servletContext) throws ServletException 
{
+    WebApplicationContext context = getContext();
+    servletContext.addListener(new ContextLoaderListener(context));
+    ServletRegistration.Dynamic dispatcher = servletContext.addServlet("geode",
+        new DispatcherServlet(context));
+    dispatcher.setLoadOnStartup(1);
+    dispatcher.addMapping("/*");
+  }
+
+  private AnnotationConfigWebApplicationContext getContext() {
+    AnnotationConfigWebApplicationContext context = new 
AnnotationConfigWebApplicationContext();
+    context.scan("org.apache.geode.rest");
+    context.register(this.getClass(), 
org.springdoc.webmvc.ui.SwaggerConfig.class,
+        org.springdoc.core.SwaggerUiConfigProperties.class,
+        org.springdoc.core.SwaggerUiOAuthProperties.class,
+        org.springdoc.webmvc.core.SpringDocWebMvcConfiguration.class,
+        org.springdoc.webmvc.core.MultipleOpenApiSupportConfiguration.class,
+        org.springdoc.core.SpringDocConfiguration.class,
+        org.springdoc.core.SpringDocConfigProperties.class,
+        
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class);
+
+    return context;
+  }
 
   @Bean
   public GroupedOpenApi api() {
diff --git a/geode-web-api/src/main/resources/swagger.properties 
b/geode-web-api/src/main/resources/swagger.properties
index 332dd37f70..b91ebc72d1 100644
--- a/geode-web-api/src/main/resources/swagger.properties
+++ b/geode-web-api/src/main/resources/swagger.properties
@@ -12,5 +12,5 @@
 # or implied. See the License for the specific language governing permissions 
and limitations under
 # the License.
 #
-springdoc.api-docs.path=/v1/api-docs
-springdoc.swagger-ui.path=/swagger-ui.html
\ No newline at end of file
+springdoc.swagger-ui.path=/swagger-ui.html
+springdoc.writer-with-order-by-keys=true
\ No newline at end of file
diff --git 
a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/security/RestSecurityConfiguration.java
 
b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/security/RestSecurityConfiguration.java
index 237bb225f1..18adc8248f 100644
--- 
a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/security/RestSecurityConfiguration.java
+++ 
b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/security/RestSecurityConfiguration.java
@@ -88,9 +88,9 @@ public class RestSecurityConfiguration extends 
WebSecurityConfigurerAdapter {
   protected void configure(HttpSecurity http) throws Exception {
     
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
         .authorizeRequests()
-        .antMatchers("/docs/**", "/swagger-ui.html", "/swagger-ui/index.html", 
"/",
-            Links.URI_VERSION + "/api-docs/**", 
"/webjars/springdoc-openapi-ui/**",
-            "/swagger-resources/**")
+        .antMatchers("/docs/**", "/swagger-ui.html", "/swagger-ui/index.html", 
"/swagger-ui/**",
+            "/", Links.URI_VERSION + "/api-docs/**", 
"/webjars/springdoc-openapi-ui/**",
+            "/v3/api-docs/**", "/swagger-resources/**")
         .permitAll()
         .and().csrf().disable();
 
diff --git 
a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/swagger/SwaggerConfig.java
 
b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/swagger/SwaggerConfig.java
index a98a587bf9..9c7c94b372 100644
--- 
a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/swagger/SwaggerConfig.java
+++ 
b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/swagger/SwaggerConfig.java
@@ -17,25 +17,65 @@ package org.apache.geode.management.internal.rest.swagger;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
 import io.swagger.v3.oas.models.info.License;
 import org.springdoc.core.GroupedOpenApi;
+import org.springdoc.webmvc.ui.SwaggerUiHome;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration;
-import 
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
 import org.springframework.context.annotation.PropertySource;
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.WebApplicationContext;
+import 
org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.servlet.DispatcherServlet;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 
 import 
org.apache.geode.management.internal.rest.security.GeodeAuthenticationProvider;
 
 
 @PropertySource({"classpath:swagger-management.properties"})
-@SpringBootApplication(exclude = {TransactionAutoConfiguration.class, 
LdapAutoConfiguration.class})
+@EnableWebMvc
+@Configuration("swaggerConfigManagement")
+@ComponentScan(basePackages = {"org.springdoc"},
+    excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
+        classes = SwaggerUiHome.class))
 @SuppressWarnings("unused")
-public class SwaggerConfig {
+public class SwaggerConfig implements WebApplicationInitializer {
+
+  @Override
+  public void onStartup(ServletContext servletContext) throws ServletException 
{
+    WebApplicationContext context = getContext();
+    servletContext.addListener(new ContextLoaderListener(context));
+    ServletRegistration.Dynamic dispatcher = servletContext.addServlet("geode",
+        new DispatcherServlet(context));
+    dispatcher.setLoadOnStartup(1);
+    dispatcher.addMapping("/*");
+  }
+
+  private AnnotationConfigWebApplicationContext getContext() {
+    AnnotationConfigWebApplicationContext context = new 
AnnotationConfigWebApplicationContext();
+    context.scan("org.apache.geode.management.internal.rest");
+    context.register(this.getClass(), 
org.springdoc.webmvc.ui.SwaggerConfig.class,
+        org.springdoc.core.SwaggerUiConfigProperties.class,
+        org.springdoc.core.SwaggerUiOAuthProperties.class,
+        org.springdoc.webmvc.core.SpringDocWebMvcConfiguration.class,
+        org.springdoc.webmvc.core.MultipleOpenApiSupportConfiguration.class,
+        org.springdoc.core.SpringDocConfiguration.class,
+        org.springdoc.core.SpringDocConfigProperties.class,
+        
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class);
+
+    return context;
+  }
 
   @Bean
   public GroupedOpenApi api() {
diff --git 
a/geode-web-management/src/main/resources/swagger-management.properties 
b/geode-web-management/src/main/resources/swagger-management.properties
index 332dd37f70..b91ebc72d1 100644
--- a/geode-web-management/src/main/resources/swagger-management.properties
+++ b/geode-web-management/src/main/resources/swagger-management.properties
@@ -12,5 +12,5 @@
 # or implied. See the License for the specific language governing permissions 
and limitations under
 # the License.
 #
-springdoc.api-docs.path=/v1/api-docs
-springdoc.swagger-ui.path=/swagger-ui.html
\ No newline at end of file
+springdoc.swagger-ui.path=/swagger-ui.html
+springdoc.writer-with-order-by-keys=true
\ No newline at end of file

Reply via email to