From 289adf7c272540f803216e46de74f66859c8d6a8 Mon Sep 17 00:00:00 2001
From: daizong <30498993@qq.com>
Date: Tue, 20 Aug 2019 09:37:08 +0800
Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E6=88=90swagger-bootstrap-ui?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 10 +-
ruoyi-common/pom.xml | 3 +-
ruoyi-common/ruoyi-common-swagger/pom.xml | 32 +++++++
.../ruoyi/common/swagger/SwaggerConfig.java | 93 +++++++++++++++++++
ruoyi-gateway/pom.xml | 15 ++-
.../ruoyi/gateway/config/SwaggerProvider.java | 57 ++++++++++++
.../com/ruoyi/gateway/fiflt/AuthFilter.java | 4 +-
.../ruoyi/gateway/handler/SwaggerHandler.java | 55 +++++++++++
ruoyi-service-api/ruoyi-system-api/pom.xml | 7 +-
.../java/com/ruoyi/system/domain/SysUser.java | 7 +-
ruoyi-service/ruoyi-auth/pom.xml | 9 +-
.../auth/controller/TokenController.java | 4 +
ruoyi-service/ruoyi-system/pom.xml | 8 +-
.../system/controller/SysUserController.java | 8 +-
14 files changed, 299 insertions(+), 13 deletions(-)
create mode 100644 ruoyi-common/ruoyi-common-swagger/pom.xml
create mode 100644 ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/SwaggerConfig.java
create mode 100644 ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
create mode 100644 ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java
diff --git a/pom.xml b/pom.xml
index f02d7e7..07ec386 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
1.1.14
1.19
2.3.2
- 2.7.0
+ 2.9.2
1.2.12
2.1.5
3.9.1
@@ -40,6 +40,7 @@
4.1.19
2.6.2
3.4.0
+ 20.0
@@ -182,6 +183,11 @@
${jwt.version}
+
+ com.google.guava
+ guava
+ ${guava.version}
+
@@ -245,4 +251,4 @@
-
\ No newline at end of file
+
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 1c6e365..8e5b012 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -14,5 +14,6 @@
ruoyi-common-redis
ruoyi-common-log
ruoyi-common-auth
+ ruoyi-common-swagger
-
\ No newline at end of file
+
diff --git a/ruoyi-common/ruoyi-common-swagger/pom.xml b/ruoyi-common/ruoyi-common-swagger/pom.xml
new file mode 100644
index 0000000..c06e364
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-swagger/pom.xml
@@ -0,0 +1,32 @@
+
+ 4.0.0
+
+ com.ruoyi.cloud
+ ruoyi-common
+ 1.0.0-SNAPSHOT
+
+ ruoyi-common-swagger
+
+
+
+ com.github.xiaoymin
+ swagger-bootstrap-ui
+ 1.8.7
+ compile
+
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+
+ io.springfox
+ springfox-bean-validators
+ ${swagger.version}
+
+
+
diff --git a/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/SwaggerConfig.java b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/SwaggerConfig.java
new file mode 100644
index 0000000..22a21fd
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/SwaggerConfig.java
@@ -0,0 +1,93 @@
+package com.ruoyi.common.swagger;
+
+import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
+import com.google.common.collect.Lists;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.core.annotation.Order;
+import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.List;
+
+/**
+ * @ClassName SwaggerConfig
+ * @PackageName com.ruoyi.system.config
+ * @Description TODO
+ * @Author daiz
+ * @Date 2019/8/16 9:57
+ * @Version 1.0
+ */
+@Configuration
+@EnableSwagger2
+@EnableSwaggerBootstrapUI
+@Import(BeanValidatorPluginsConfiguration.class)
+public class SwaggerConfig {
+
+ @Bean(value = "userApi")
+ @Order(value = 1)
+ public Docket groupRestApi() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(apiInfo())
+ .select()
+ .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+ .paths(PathSelectors.any())
+
+ .build().securityContexts(Lists.newArrayList(securityContext(), securityContext1())).securitySchemes(Lists.newArrayList(apiKey(), apiKey1()));
+ }
+
+ private ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ .title("swagger-bootstrap-ui")
+ .description("swagger-bootstrap-ui-demo RESTful APIs")
+ .termsOfServiceUrl("")
+ .contact("group@qq.com")
+ .version("1.0")
+ .build();
+ }
+
+ private ApiKey apiKey() {
+ return new ApiKey("BearerToken", "Authorization", "header");
+ }
+
+ private ApiKey apiKey1() {
+ return new ApiKey("BearerToken1", "Authorization-x", "header");
+ }
+
+ private SecurityContext securityContext() {
+ return SecurityContext.builder()
+ .securityReferences(defaultAuth())
+ .forPaths(PathSelectors.regex("/.*"))
+ .build();
+ }
+
+ private SecurityContext securityContext1() {
+ return SecurityContext.builder()
+ .securityReferences(defaultAuth1())
+ .forPaths(PathSelectors.regex("/.*"))
+ .build();
+ }
+
+ List defaultAuth() {
+ AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+ AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+ authorizationScopes[0] = authorizationScope;
+ return Lists.newArrayList(new SecurityReference("BearerToken", authorizationScopes));
+ }
+
+ List defaultAuth1() {
+ AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+ AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+ authorizationScopes[0] = authorizationScope;
+ return Lists.newArrayList(new SecurityReference("BearerToken1", authorizationScopes));
+ }
+}
diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml
index 2177e8d..78e68e6 100644
--- a/ruoyi-gateway/pom.xml
+++ b/ruoyi-gateway/pom.xml
@@ -54,6 +54,19 @@
com.github.penggle
kaptcha
+
+
+
+ com.github.xiaoymin
+ swagger-bootstrap-ui
+ 1.8.7
+ compile
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
@@ -73,4 +86,4 @@
-
\ No newline at end of file
+
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
new file mode 100644
index 0000000..28af192
--- /dev/null
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
@@ -0,0 +1,57 @@
+package com.ruoyi.gateway.config;
+
+import lombok.AllArgsConstructor;
+import org.springframework.cloud.gateway.config.GatewayProperties;
+import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.support.NameUtils;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+import springfox.documentation.swagger.web.SwaggerResource;
+import springfox.documentation.swagger.web.SwaggerResourcesProvider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName SwaggerProvider
+ * @PackageName com.ruoyi.gateway.config
+ * @Description TODO
+ * @Author daiz
+ * @Date 2019/8/16 10:04
+ * @Version 1.0
+ */
+
+@Component
+@Primary
+@AllArgsConstructor
+public class SwaggerProvider implements SwaggerResourcesProvider {
+
+ public static final String API_URI = "/v2/api-docs";
+ private final RouteLocator routeLocator;
+ private final GatewayProperties gatewayProperties;
+
+
+ @Override
+ public List get() {
+ List resources = new ArrayList<>();
+ List routes = new ArrayList<>();
+ //取出gateway的route
+ routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
+ //结合配置的route-路径(Path),和route过滤,只获取有效的route节点
+ gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId()))
+ .forEach(routeDefinition -> routeDefinition.getPredicates().stream()
+ .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
+ .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),
+ predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
+ .replace("/**", API_URI)))));
+ return resources;
+ }
+
+ private SwaggerResource swaggerResource(String name, String location) {
+ SwaggerResource swaggerResource = new SwaggerResource();
+ swaggerResource.setName(name);
+ swaggerResource.setLocation(location);
+ swaggerResource.setSwaggerVersion("2.0");
+ return swaggerResource;
+ }
+}
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/fiflt/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/fiflt/AuthFilter.java
index 6c2d58d..3349433 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/fiflt/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/fiflt/AuthFilter.java
@@ -34,7 +34,7 @@ import reactor.core.publisher.Mono;
public class AuthFilter implements GlobalFilter, Ordered
{
// 排除过滤的 uri 地址
- private static final String[] whiteList = {"/auth/login", "/user/register"};
+ private static final String[] whiteList = {"/auth/login", "/user/register", "/system/v2/api-docs", "/auth/v2/api-docs"};
@Resource(name = "stringRedisTemplate")
private ValueOperations ops;
@@ -96,4 +96,4 @@ public class AuthFilter implements GlobalFilter, Ordered
{
return -200;
}
-}
\ No newline at end of file
+}
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java
new file mode 100644
index 0000000..fe9516b
--- /dev/null
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java
@@ -0,0 +1,55 @@
+package com.ruoyi.gateway.handler;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Mono;
+import springfox.documentation.swagger.web.*;
+
+import java.util.Optional;
+
+/**
+ * @ClassName SwaggerHandler
+ * @PackageName com.ruoyi.gateway.handler
+ * @Description TODO
+ * @Author daiz
+ * @Date 2019/8/16 10:07
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/swagger-resources")
+public class SwaggerHandler {
+
+ @Autowired(required = false)
+ private SecurityConfiguration securityConfiguration;
+
+ @Autowired(required = false)
+ private UiConfiguration uiConfiguration;
+
+ private final SwaggerResourcesProvider swaggerResources;
+
+ @Autowired
+ public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
+ this.swaggerResources = swaggerResources;
+ }
+
+ @GetMapping("/configuration/security")
+ public Mono> securityConfiguration() {
+ return Mono.just(new ResponseEntity<>(
+ Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
+ }
+
+ @GetMapping("/configuration/ui")
+ public Mono> uiConfiguration() {
+ return Mono.just(new ResponseEntity<>(
+ Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
+ }
+
+ @GetMapping("")
+ public Mono swaggerResources() {
+ return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
+ }
+}
diff --git a/ruoyi-service-api/ruoyi-system-api/pom.xml b/ruoyi-service-api/ruoyi-system-api/pom.xml
index 4f749f9..a29c65a 100644
--- a/ruoyi-service-api/ruoyi-system-api/pom.xml
+++ b/ruoyi-service-api/ruoyi-system-api/pom.xml
@@ -18,5 +18,10 @@
${ruoyi.version}
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
-
\ No newline at end of file
+
diff --git a/ruoyi-service-api/ruoyi-system-api/src/main/java/com/ruoyi/system/domain/SysUser.java b/ruoyi-service-api/ruoyi-system-api/src/main/java/com/ruoyi/system/domain/SysUser.java
index ddd246d..4f34966 100644
--- a/ruoyi-service-api/ruoyi-system-api/src/main/java/com/ruoyi/system/domain/SysUser.java
+++ b/ruoyi-service-api/ruoyi-system-api/src/main/java/com/ruoyi/system/domain/SysUser.java
@@ -4,6 +4,8 @@ import java.util.Date;
import java.util.List;
import java.util.Set;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@@ -14,18 +16,21 @@ import com.ruoyi.common.core.domain.BaseEntity;
/**
* 用户对象 sys_user
- *
+ *
* @author ruoyi
*/
+@ApiModel(description = "用户对象实体")
public class SysUser extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 用户ID */
+ @ApiModelProperty(value = "用户序号", example = "123")
@Excel(name = "用户序号", prompt = "用户编号")
private Long userId;
/** 部门ID */
+ @ApiModelProperty(value = "部门编号", example = "456")
@Excel(name = "部门编号", type = Type.IMPORT)
private Long deptId;
diff --git a/ruoyi-service/ruoyi-auth/pom.xml b/ruoyi-service/ruoyi-auth/pom.xml
index db162bc..532aeed 100644
--- a/ruoyi-service/ruoyi-auth/pom.xml
+++ b/ruoyi-service/ruoyi-auth/pom.xml
@@ -62,7 +62,12 @@
ruoyi-common-log
${ruoyi.version}
-
+
+
+ com.ruoyi.cloud
+ ruoyi-common-swagger
+ 1.0.0-SNAPSHOT
+
org.springframework.boot
@@ -105,4 +110,4 @@
-
\ No newline at end of file
+
diff --git a/ruoyi-service/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-service/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
index c8dcc58..38b1c4c 100644
--- a/ruoyi-service/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
+++ b/ruoyi-service/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -2,6 +2,8 @@ package com.ruoyi.auth.controller;
import javax.servlet.http.HttpServletRequest;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -13,6 +15,7 @@ import com.ruoyi.auth.service.SysLoginService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.domain.SysUser;
+@Api(tags = "系统登录")
@RestController
public class TokenController
{
@@ -22,6 +25,7 @@ public class TokenController
@Autowired
private SysLoginService sysLoginService;
+ @ApiOperation(value = "用户登录")
@PostMapping("login")
public R login(@RequestBody LoginForm form)
{
diff --git a/ruoyi-service/ruoyi-system/pom.xml b/ruoyi-service/ruoyi-system/pom.xml
index daaf66a..8c9f4cb 100644
--- a/ruoyi-service/ruoyi-system/pom.xml
+++ b/ruoyi-service/ruoyi-system/pom.xml
@@ -89,6 +89,12 @@
ruoyi-common-redis
${ruoyi.version}
+
+
+ com.ruoyi.cloud
+ ruoyi-common-swagger
+ ${ruoyi.version}
+
@@ -159,4 +165,4 @@
-
\ No newline at end of file
+
diff --git a/ruoyi-service/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-service/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index 6429d92..31402ad 100644
--- a/ruoyi-service/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-service/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -2,6 +2,8 @@ package com.ruoyi.system.controller;
import javax.servlet.http.HttpServletRequest;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@@ -24,10 +26,11 @@ import com.ruoyi.system.util.PasswordUtil;
/**
* 用户 提供者
- *
+ *
* @author zmr
* @date 2019-05-20
*/
+@Api(tags = "用户模块")
@RestController
@RequestMapping("user")
public class SysUserController extends BaseController
@@ -68,6 +71,7 @@ public class SysUserController extends BaseController
/**
* 查询用户列表
*/
+ @ApiOperation(value = "查询用户列表数据")
@GetMapping("list")
public R list(SysUser sysUser)
{
@@ -177,7 +181,7 @@ public class SysUserController extends BaseController
/**
* 删除用户
- * @throws Exception
+ * @throws Exception
*/
@HasPermissions("system:user:remove")
@OperLog(title = "用户管理", businessType = BusinessType.DELETE)
--
Gitee