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