diff --git a/opsli-api/pom.xml b/opsli-api/pom.xml index d310348c..31ee2ac7 100644 --- a/opsli-api/pom.xml +++ b/opsli-api/pom.xml @@ -28,37 +28,11 @@ - - - io.springfox - springfox-swagger2 - 2.9.2 - - - io.springfox - springfox-swagger-ui - 2.9.2 - com.github.xiaoymin - swagger-bootstrap-ui - 1.9.3 - - - io.springfox - springfox-bean-validators - 2.9.2 - - - - io.swagger - swagger-annotations - 1.5.22 - - - io.swagger - swagger-models - 1.5.22 + knife4j-spring-boot-starter + + 2.0.5 diff --git a/opsli-api/src/main/java/org/opsli/api/conf/SpringWebMvcConfig.java b/opsli-api/src/main/java/org/opsli/api/conf/SpringWebMvcConfig.java index d2248d97..a9e4edcb 100644 --- a/opsli-api/src/main/java/org/opsli/api/conf/SpringWebMvcConfig.java +++ b/opsli-api/src/main/java/org/opsli/api/conf/SpringWebMvcConfig.java @@ -1,22 +1,11 @@ package org.opsli.api.conf; -import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.opsli.api.conf.prop.ApiPathProperties; import org.opsli.common.annotation.ApiRestController; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; import javax.annotation.Resource; @@ -26,73 +15,20 @@ import javax.annotation.Resource; */ @Slf4j @Configuration -@EnableSwagger2 -@EnableSwaggerBootstrapUI public class SpringWebMvcConfig implements WebMvcConfigurer { @Resource private ApiPathProperties apiPathProperties; + /** + * 配置 ApiRestController 生效 + * @param configurer + */ @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer .addPathPrefix(apiPathProperties.getGlobalPrefix(),c -> c.isAnnotationPresent(ApiRestController.class)); } - // ========================= Swagger ========================= - - /** - * - * 显示swagger-ui.html文档展示页,还必须注入swagger资源: - * - * @param registry - */ - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); - registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); - registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); - } - - /** - * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等 - * - * @return Docket - */ - @Bean - public Docket createRestApi() { - return new Docket(DocumentationType.SWAGGER_2) - .apiInfo(apiInfo()) - .select() - //此包路径下的类,才生成接口文档 - .apis(RequestHandlerSelectors.basePackage("org.opsli")) - //加了ApiOperation注解的类,才生成接口文档 - .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) - .paths(PathSelectors.any()) - .build(); - } - - - - /** - * api文档的详细信息函数,注意这里的注解引用的是哪个 - * - * @return - */ - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - // //大标题 - .title("Opsli-Boot 后台服务API接口文档") - // 版本号 - .version("1.0") -// .termsOfServiceUrl("NO terms of service") - // 描述 - .description("后台API接口") - // 作者 - .contact("Parker") - .license("The Apache License, Version 2.0") - .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html") - .build(); - } } diff --git a/opsli-base-support/opsli-common/src/main/java/org/opsli/common/constants/TokenConstants.java b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/constants/TokenConstants.java new file mode 100644 index 00000000..b49999c5 --- /dev/null +++ b/opsli-base-support/opsli-common/src/main/java/org/opsli/common/constants/TokenConstants.java @@ -0,0 +1,15 @@ +package org.opsli.common.constants; + +/** + * @BelongsProject: opsli-boot + * @BelongsPackage: org.opsli.common.constants + * @Author: Parker + * @CreateTime: 2020-09-16 17:42 + * @Description: Token + */ +public interface TokenConstants { + + /** ACCESS_TOKEN */ + String ACCESS_TOKEN = "token"; + +} diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/SwaggerConfig.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/SwaggerConfig.java new file mode 100644 index 00000000..7b97fc40 --- /dev/null +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/conf/SwaggerConfig.java @@ -0,0 +1,127 @@ +package org.opsli.core.conf; + +import com.fasterxml.classmate.TypeResolver; +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiOperation; +import org.opsli.common.constants.TokenConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; +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.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; + +@Configuration +@EnableSwagger2 +@EnableKnife4j +@Import(BeanValidatorPluginsConfiguration.class) +public class SwaggerConfig { + + private final TypeResolver typeResolver; + + @Autowired + public SwaggerConfig(TypeResolver typeResolver) { + this.typeResolver = typeResolver; + } + + // ========================= Swagger ========================= + + /** + * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等 + * + * @return Docket + */ + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .groupName("opsli 2.X") + .select() + //此包路径下的类,才生成接口文档 + .apis(RequestHandlerSelectors.basePackage("org.opsli")) + //加了ApiOperation注解的类,才生成接口文档 + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + .paths(PathSelectors.any()) + .build() + .securityContexts(Lists.newArrayList(securityContext())) + .securitySchemes(Lists.newArrayList(apiKey())); + + } + + + /** + * api文档的详细信息函数,注意这里的注解引用的是哪个 + * + * @return + */ + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + // //大标题 + .title("Opsli-Boot 后台服务API接口文档") + // 版本号 + .version("1.0") + // 描述 + .description("后台API接口") + // 作者 + .contact("Parker") + .license("The Apache License, Version 2.0") + .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html") + .build(); + } + + + /** + * 安全模块 + * @return + */ + private SecurityContext securityContext() { + return SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.regex("/.*")) + .build(); + } + + /** + * jwt token + * @return + */ + private List defaultToken() { + ParameterBuilder parameterBuilder = new ParameterBuilder(); + List parameters= Lists.newArrayList(); + parameterBuilder.name(TokenConstants.ACCESS_TOKEN) + .description("Token 令牌") + .modelRef(new ModelRef("String")) + .parameterType("header") + .required(false).build(); + parameters.add(parameterBuilder.build()); + return parameters; + } + + /** + * oauth2 授权 + * @return + */ + List defaultAuth() { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + return Lists.newArrayList(new SecurityReference(TokenConstants.ACCESS_TOKEN, authorizationScopes)); + } + + private ApiKey apiKey() { + return new ApiKey(TokenConstants.ACCESS_TOKEN, TokenConstants.ACCESS_TOKEN, "header"); + } + +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 16fa89f0..259c0cae 100644 --- a/pom.xml +++ b/pom.xml @@ -163,6 +163,12 @@ org.springframework.boot spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-validation + +