This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new eedbe293d4 GEODE-10312: Fix the v1/v3 mismatch. (#7720)
eedbe293d4 is described below
commit eedbe293d4b96839ea192c88c479c3e92de52ef8
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.
---
.../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