From 775212bbbdbda53f8c27aa9ff558ac112f88cac6 Mon Sep 17 00:00:00 2001 From: lWoHvYe <39266195+lWoHvYe@users.noreply.github.com> Date: Sat, 13 Feb 2021 10:43:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3=E6=96=87?= =?UTF-8?q?=E6=A1=A3Swagger=E4=B8=AD=EF=BC=8Ctoken=E7=9A=84=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=96=B9=E5=BC=8F=EF=BC=8C=E7=94=B1=E6=AF=8F=E4=B8=AA?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8D=95=E7=8B=AC=E8=AE=BE=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E8=AE=BE=E7=BD=AE=E7=BB=9F=E4=B8=80=E7=9A=84?= =?UTF-8?q?token=EF=BC=8C=E6=97=A5=E5=B8=B8=E6=B5=8B=E8=AF=95=E6=9B=B4?= =?UTF-8?q?=E5=8A=A0=E6=96=B9=E4=BE=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/zhengjie/config/SwaggerConfig.java | 67 ++++++++++++++----- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/eladmin-common/src/main/java/me/zhengjie/config/SwaggerConfig.java b/eladmin-common/src/main/java/me/zhengjie/config/SwaggerConfig.java index e5e16216..54e47cbd 100644 --- a/eladmin-common/src/main/java/me/zhengjie/config/SwaggerConfig.java +++ b/eladmin-common/src/main/java/me/zhengjie/config/SwaggerConfig.java @@ -16,7 +16,6 @@ package me.zhengjie.config; import com.fasterxml.classmate.TypeResolver; -import com.google.common.base.Predicates; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -26,18 +25,18 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.data.domain.Pageable; import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.schema.AlternateTypeRule; import springfox.documentation.schema.AlternateTypeRuleConvention; -import springfox.documentation.schema.ModelRef; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Parameter; +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.ArrayList; import java.util.List; + import static com.google.common.collect.Lists.newArrayList; import static springfox.documentation.schema.AlternateTypeRules.newRule; @@ -62,22 +61,26 @@ public class SwaggerConfig { @Bean @SuppressWarnings("all") public Docket createRestApi() { - ParameterBuilder ticketPar = new ParameterBuilder(); - List pars = new ArrayList<>(); - ticketPar.name(tokenHeader).description("token") - .modelRef(new ModelRef("string")) - .parameterType("header") - .defaultValue(tokenStartWith + " ") - .required(true) - .build(); - pars.add(ticketPar.build()); +// ParameterBuilder ticketPar = new ParameterBuilder(); +//// List pars = new ArrayList<>(); +//// ticketPar.name(tokenHeader).description("token") +//// .modelRef(new ModelRef("string")) +//// .parameterType("header") +//// .defaultValue(tokenStartWith + " ") +//// .required(true) +//// .build(); +// pars.add(ticketPar.build()); return new Docket(DocumentationType.SWAGGER_2) .enable(enabled) .apiInfo(apiInfo()) .select() - .paths(Predicates.not(PathSelectors.regex("/error.*"))) +// .paths(Predicates.not(PathSelectors.regex("/error.*"))) + .paths(PathSelectors.any()) .build() - .globalOperationParameters(pars); +// .globalOperationParameters(pars) + //添加登陆认证 + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()); } private ApiInfo apiInfo() { @@ -88,6 +91,38 @@ public class SwaggerConfig { .build(); } + private List securitySchemes() { + //设置请求头信息 + List securitySchemes = new ArrayList<>(); + ApiKey apiKey = new ApiKey(tokenHeader, tokenHeader, "header"); + securitySchemes.add(apiKey); + return securitySchemes; + } + + private List securityContexts() { + //设置需要登录认证的路径 + List securityContexts = new ArrayList<>(); + // ^(?!auth).*$ 表示所有包含auth的接口不需要使用securitySchemes即不需要带token + // ^标识开始 ()里是一子表达式 ?!/auth表示匹配不是/auth的位置,匹配上则添加请求头,注意路径已/开头 .表示任意字符 *表示前面的字符匹配多次 $标识结束 + securityContexts.add(getContextByPath("^(?!/auth).*$")); + return securityContexts; + } + + private SecurityContext getContextByPath(String pathRegex) { + return SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.regex(pathRegex)) + .build(); + } + + private List defaultAuth() { + List securityReferences = new ArrayList<>(); + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + securityReferences.add(new SecurityReference(tokenHeader, authorizationScopes)); + return securityReferences; + } } /**