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

benjobs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev by this push:
     new 22b543b8b [Feautre] Upgrade swagger to 3.0.0 (#1863)
22b543b8b is described below

commit 22b543b8bc4c9fb4835dfd0f9b16b0579b27b004
Author: lvshaokang <[email protected]>
AuthorDate: Thu Oct 20 01:19:55 2022 +0800

    [Feautre] Upgrade swagger to 3.0.0 (#1863)
    
    * [Feature] Upgrade swagger3
---
 .../streampark-console-service/pom.xml             | 27 ++++-------
 .../console/base/config/SwaggerConfig.java         | 53 ++++++++++++++--------
 .../console/core/controller/AlertController.java   | 13 +++---
 .../ApplicationBuildPipelineController.java        |  4 +-
 .../core/controller/ApplicationController.java     | 24 +++++-----
 .../console/system/authentication/ShiroConfig.java |  8 +---
 .../src/main/resources/application.yml             | 11 +++++
 7 files changed, 79 insertions(+), 61 deletions(-)

diff --git a/streampark-console/streampark-console-service/pom.xml 
b/streampark-console/streampark-console-service/pom.xml
index ca1ad593a..c40b4f826 100644
--- a/streampark-console/streampark-console-service/pom.xml
+++ b/streampark-console/streampark-console-service/pom.xml
@@ -44,9 +44,8 @@
         <MaxPermGen>512m</MaxPermGen>
         <CodeCacheSize>512m</CodeCacheSize>
 
-        <swagger.version>1.9.3</swagger.version>
-        <springfox.version>2.9.2</springfox.version>
-        <swagger-models.version>1.5.24</swagger-models.version>
+        <swagger-bootstrap.version>2.0.9</swagger-bootstrap.version>
+        <springfox.version>3.0.0</springfox.version>
         <commons-compress.version>1.21</commons-compress.version>
         <javax-mail.version>1.4.7</javax-mail.version>
         <shiro.version>1.9.1</shiro.version>
@@ -358,31 +357,25 @@
             
<artifactId>jackson-module-scala_${scala.binary.version}</artifactId>
         </dependency>
 
-        <!-- swagger 2 -->
+        <!-- swagger 3 -->
         <dependency>
             <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
+            <artifactId>springfox-boot-starter</artifactId>
             <version>${springfox.version}</version>
         </dependency>
 
+        <!-- swagger-bootstrap -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-models</artifactId>
-            <version>${swagger-models.version}</version>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-ui</artifactId>
+            <version>${swagger-bootstrap.version}</version>
         </dependency>
 
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
-            <artifactId>swagger-bootstrap-ui</artifactId>
-            <version>${swagger.version}</version>
+            <artifactId>knife4j-spring-boot-autoconfigure</artifactId>
+            <version>${swagger-bootstrap.version}</version>
         </dependency>
-
     </dependencies>
 
     <profiles>
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/SwaggerConfig.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/SwaggerConfig.java
index 149f87a62..2fbbba8a3 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/SwaggerConfig.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/SwaggerConfig.java
@@ -17,46 +17,63 @@
 
 package org.apache.streampark.console.base.config;
 
-import 
com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.ParameterBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.schema.ModelRef;
+import springfox.documentation.oas.annotations.EnableOpenApi;
 import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.Parameter;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.HttpAuthenticationScheme;
+import springfox.documentation.service.SecurityReference;
 import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContextBuilder;
 import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Collections;
 
-/**
- * swager2 config class
- */
 @Configuration
-@EnableSwagger2
-@EnableSwaggerBootstrapUI
+@EnableOpenApi
 @ConditionalOnWebApplication
 public class SwaggerConfig implements WebMvcConfigurer {
 
+    @Value("${swagger.enable:false}")
+    private Boolean swaggerEnabled;
+
     @Bean
     public Docket createRestApi() {
-        List<Parameter> pars = new ArrayList<Parameter>();
-        ParameterBuilder tokenPar = new ParameterBuilder();
-        tokenPar.name("Authorization").description("accessToken").modelRef(new 
ModelRef("string")).parameterType("header").required(true).build();
-        pars.add(tokenPar.build());
-        return new 
Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).paths(PathSelectors.any()).build().globalOperationParameters(pars);
+        return new Docket(DocumentationType.OAS_30)
+            .enable(swaggerEnabled)
+            .apiInfo(apiInfo())
+            .securitySchemes(Collections.singletonList(
+                
HttpAuthenticationScheme.JWT_BEARER_BUILDER.name("BearerToken").build()
+            ))
+            .securityContexts(Collections.singletonList(
+                new SecurityContextBuilder()
+                    .securityReferences(Collections.singletonList(
+                        SecurityReference.builder()
+                            .scopes(new AuthorizationScope[0])
+                            .reference("BearerToken")
+                            .build()))
+                    .operationSelector(s -> true)
+                    .build()
+            ))
+            .select()
+            
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+            .paths(PathSelectors.any())
+            .build();
     }
 
     private ApiInfo apiInfo() {
-        return new ApiInfoBuilder().title("StreamPark Api 
Docs").description("StreamPark Api Docs").build();
+        return new ApiInfoBuilder()
+            .title("StreamPark Api Docs")
+            .description("StreamPark Api Docs")
+            .build();
     }
 
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
index 55a478f39..025d924b6 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
@@ -39,6 +39,7 @@ import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.constraints.NotNull;
@@ -90,10 +91,10 @@ public class AlertController {
 
     @ApiOperation(value = "listPageAlertConfigs")
     @ApiImplicitParams({
-        @ApiImplicitParam(name = "pageSize", value = "page size", required = 
true, example = "10"),
-        @ApiImplicitParam(name = "pageNum", value = "page num", required = 
true, example = "1"),
-        @ApiImplicitParam(name = "sortField", value = "sort field"),
-        @ApiImplicitParam(name = "sortOrder", value = "sort order")
+        @ApiImplicitParam(name = "pageSize", value = "page size", required = 
true, example = "10", dataTypeClass = Integer.class),
+        @ApiImplicitParam(name = "pageNum", value = "page num", required = 
true, example = "1", dataTypeClass = Integer.class),
+        @ApiImplicitParam(name = "sortField", value = "sort field", dataType = 
"string", dataTypeClass = String.class),
+        @ApiImplicitParam(name = "sortOrder", value = "sort order", dataType = 
"string", dataTypeClass = String.class)
     })
     @PostMapping(value = "/list")
     public RestResponse listPageAlertConfigs(@RequestBody 
AlertConfigWithParams params, RestRequest request) {
@@ -110,10 +111,10 @@ public class AlertController {
 
     @ApiOperation(value = "deleteAlertConfig")
     @ApiImplicitParams({
-        @ApiImplicitParam(name = "id", value = "config id", required = true)
+        @ApiImplicitParam(name = "id", value = "config id", required = true, 
paramType = "query", dataTypeClass = Long.class)
     })
     @DeleteMapping("/delete")
-    public RestResponse deleteAlertConfig(@NotNull(message = "config id must 
be not null") Long id) {
+    public RestResponse deleteAlertConfig(@RequestParam("id") @NotNull(message 
= "config id must be not null") Long id) {
         boolean result = alertConfigService.deleteById(id);
         return RestResponse.success(result);
     }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
index d31832a1c..c24db2475 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
@@ -69,8 +69,8 @@ public class ApplicationBuildPipelineController {
     @ApiAccess
     @ApiOperation(value = "Launch application", notes = "Launch application", 
tags = ApiDocConstant.FLINK_APP_OP_TAG, consumes = 
"application/x-www-form-urlencoded")
     @ApiImplicitParams({
-        @ApiImplicitParam(name = "appId", value = "APP_ID", required = true, 
paramType = "form", dataType = "Long"),
-        @ApiImplicitParam(name = "forceBuild", value = "FORCE_BUILD", required 
= true, paramType = "form", dataType = "Boolean", defaultValue = "false"),
+        @ApiImplicitParam(name = "appId", value = "APP_ID", required = true, 
paramType = "query", dataTypeClass = Long.class),
+        @ApiImplicitParam(name = "forceBuild", value = "FORCE_BUILD", required 
= true, paramType = "query", dataTypeClass = Boolean.class, defaultValue = 
"false"),
     })
     @PostMapping(value = "build", consumes = 
"application/x-www-form-urlencoded")
     @RequiresPermissions("app:create")
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
index 80bfc725a..97c7934a9 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
@@ -103,9 +103,9 @@ public class ApplicationController {
     @ApiAccess
     @ApiOperation(value = "App Copy", notes = "App Copy", tags = 
ApiDocConstant.FLINK_APP_OP_TAG, consumes = "application/x-www-form-urlencoded")
     @ApiImplicitParams({
-        @ApiImplicitParam(name = "id", value = "copy target app id", required 
= true, paramType = "form", dataType = "Long"),
-        @ApiImplicitParam(name = "jobName", value = "name of the copied 
application", required = true, paramType = "form", dataType = "String", 
defaultValue = ""),
-        @ApiImplicitParam(name = "args", value = "commit parameters after 
copying", required = false, paramType = "form", dataType = "String", 
defaultValue = "")})
+        @ApiImplicitParam(name = "id", value = "copy target app id", required 
= true, paramType = "query", dataTypeClass = Long.class),
+        @ApiImplicitParam(name = "jobName", value = "name of the copied 
application", required = true, paramType = "query", dataTypeClass = 
String.class, defaultValue = ""),
+        @ApiImplicitParam(name = "args", value = "commit parameters after 
copying", required = false, paramType = "query", dataTypeClass = String.class, 
defaultValue = "")})
     @PostMapping(value = "copy", consumes = 
"application/x-www-form-urlencoded")
     @RequiresPermissions("app:copy")
     public RestResponse copy(@ApiIgnore Application app) throws IOException {
@@ -165,11 +165,11 @@ public class ApplicationController {
     @ApiAccess
     @ApiOperation(value = "App Start", notes = "App Start", tags = 
ApiDocConstant.FLINK_APP_OP_TAG, consumes = "application/x-www-form-urlencoded")
     @ApiImplicitParams({
-        @ApiImplicitParam(name = "id", value = "app Id", required = true, 
paramType = "form", dataType = "Long"),
-        @ApiImplicitParam(name = "savePointed", value = 
"从savepoint或最新checkpoint恢复app", required = true, paramType = "form", dataType = 
"Boolean", defaultValue = "false"),
-        @ApiImplicitParam(name = "savePoint", value = 
"手动填写savepoint或最新checkpoint", required = true, paramType = "form", dataType = 
"String", defaultValue = ""),
-        @ApiImplicitParam(name = "flameGraph", value = "flame Graph support", 
required = true, paramType = "form", dataType = "Boolean", defaultValue = 
"false"),
-        @ApiImplicitParam(name = "allowNonRestored", value = "ignore savepoint 
then cannot be restored", required = true, paramType = "form", dataType = 
"Boolean", defaultValue = "false")})
+        @ApiImplicitParam(name = "id", value = "app Id", required = true, 
paramType = "query", dataTypeClass = Long.class),
+        @ApiImplicitParam(name = "savePointed", value = "restored app from the 
savepoint or latest checkpoint", required = true, paramType = "query", 
dataTypeClass = Boolean.class, defaultValue = "false"),
+        @ApiImplicitParam(name = "savePoint", value = "savepoint or checkpoint 
path", required = true, paramType = "query", dataTypeClass = String.class, 
defaultValue = ""),
+        @ApiImplicitParam(name = "flameGraph", value = "flame Graph support", 
required = true, paramType = "query", dataTypeClass = Boolean.class, 
defaultValue = "false"),
+        @ApiImplicitParam(name = "allowNonRestored", value = "ignore savepoint 
then cannot be restored", required = true, paramType = "query", dataTypeClass = 
Boolean.class, defaultValue = "false")})
     @PostMapping(value = "start", consumes = 
"application/x-www-form-urlencoded")
     @RequiresPermissions("app:start")
     public RestResponse start(@ApiIgnore Application app) {
@@ -186,10 +186,10 @@ public class ApplicationController {
     @ApiAccess
     @ApiOperation(value = "App Cancel", notes = "App Cancel", tags = 
ApiDocConstant.FLINK_APP_OP_TAG, consumes = "application/x-www-form-urlencoded")
     @ApiImplicitParams({
-        @ApiImplicitParam(name = "id", value = "app Id", required = true, 
paramType = "form", dataType = "Long"),
-        @ApiImplicitParam(name = "savePointed", value = "trigger savePoint 
before taking stoping", required = true, paramType = "form", dataType = 
"Boolean", defaultValue = "false"),
-        @ApiImplicitParam(name = "savePoint", value = "savepoint path", 
paramType = "form", dataType = "String", defaultValue = "hdfs:///tm/xxx"),
-        @ApiImplicitParam(name = "drain", value = "send max watermark before 
canceling", required = true, paramType = "form", dataType = "Boolean", 
defaultValue = "false")})
+        @ApiImplicitParam(name = "id", value = "app Id", required = true, 
paramType = "query", dataTypeClass = Long.class),
+        @ApiImplicitParam(name = "savePointed", value = "trigger savePoint 
before taking stopping", required = true, paramType = "query", dataTypeClass = 
Boolean.class, defaultValue = "false"),
+        @ApiImplicitParam(name = "savePoint", value = "savepoint path", 
paramType = "query", dataTypeClass = String.class, defaultValue = 
"hdfs:///tm/xxx"),
+        @ApiImplicitParam(name = "drain", value = "send max watermark before 
canceling", required = true, paramType = "query", dataTypeClass = 
Boolean.class, defaultValue = "false")})
     @PostMapping(value = "cancel", consumes = 
"application/x-www-form-urlencoded")
     @RequiresPermissions("app:cancel")
     public RestResponse cancel(@ApiIgnore Application app) throws Exception {
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
index 8b9202fa9..07dcd181e 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
@@ -28,9 +28,6 @@ import javax.servlet.Filter;
 
 import java.util.LinkedHashMap;
 
-/**
- * Shiro Config
- */
 @Configuration
 public class ShiroConfig {
 
@@ -45,13 +42,12 @@ public class ShiroConfig {
 
         LinkedHashMap<String, String> filterChainDefinitionMap = new 
LinkedHashMap<>();
         filterChainDefinitionMap.put("/doc.html", "anon");
-        filterChainDefinitionMap.put("/swagger-ui.html", "anon");
+        filterChainDefinitionMap.put("/swagger-ui/**", "anon");
         filterChainDefinitionMap.put("/swagger-resources", "anon");
         
filterChainDefinitionMap.put("/swagger-resources/configuration/security", 
"anon");
         filterChainDefinitionMap.put("/swagger-resources/configuration/ui", 
"anon");
-        filterChainDefinitionMap.put("/v2/api-docs", "anon");
+        filterChainDefinitionMap.put("/v3/api-docs", "anon");
         filterChainDefinitionMap.put("/webjars/**", "anon");
-
         filterChainDefinitionMap.put("/**", "jwt");
 
         
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/application.yml
 
b/streampark-console/streampark-console-service/src/main/resources/application.yml
index 0b9751e63..4cb829ce5 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/application.yml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/application.yml
@@ -28,6 +28,17 @@ logging:
   level:
     root: info
 
+swagger:
+  enable: true
+
+knife4j:
+  enable: true
+  basic:
+    # basic authentication, used to access swagger-ui and doc
+    enable: false
+    username: admin
+    password: streampark
+
 spring:
   profiles.active: h2 #[h2,pgsql,mysql]
   application.name: StreamPark

Reply via email to