From 8bb800c68e0a69a4220ec15cfb085a1b8f889f61 Mon Sep 17 00:00:00 2001 From: lWoHvYe <39266195+lWoHvYe@users.noreply.github.com> Date: Mon, 1 Mar 2021 19:07:56 +0800 Subject: [PATCH] =?UTF-8?q?Spring=20Boot=E7=89=88=E6=9C=AC=E5=8D=87?= =?UTF-8?q?=E7=BA=A72.2.10=EF=BC=8C=E8=A7=A3=E5=86=B3in=20=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BC=A0null=E6=97=B6=E6=8A=A5=E9=94=99=E3=80=82?= =?UTF-8?q?=E8=B0=83=E6=95=B4Swagger=E4=B8=ADtoken=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=20(#595)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Spring Boot版本调整为2.2.10。在此前的版本,若in 查询传入null,会报错。相关sql 为in ()。在2.2版本修复了此问题,相关sql改为 in (null)。鉴于此,建议进行升级。 * Spring Boot依赖升级后,Sort的设置方式调整。由 new Sort()改为 Sort.by() * 调整接口文档Swagger中,token的设置方式,由每个接口单独设置,改为设置统一的token,日常测试更加方便 --- .../me/zhengjie/config/SwaggerConfig.java | 67 ++++++++++++++----- .../system/service/impl/DeptServiceImpl.java | 4 +- .../system/service/impl/MenuServiceImpl.java | 2 +- .../system/service/impl/RoleServiceImpl.java | 2 +- pom.xml | 2 +- 5 files changed, 56 insertions(+), 21 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; + } } /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java index 8c7c331a..657a6074 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java @@ -58,7 +58,7 @@ public class DeptServiceImpl implements DeptService { @Override public List queryAll(DeptQueryCriteria criteria, Boolean isQuery) throws Exception { - Sort sort = new Sort(Sort.Direction.ASC, "deptSort"); + Sort sort = Sort.by(Sort.Direction.ASC, "deptSort"); String dataScopeType = SecurityUtils.getDataScopeType(); if (isQuery) { if(dataScopeType.equals(DataScopeEnum.ALL.getValue())){ @@ -278,4 +278,4 @@ public class DeptServiceImpl implements DeptService { redisUtils.delByKeys(CacheKey.DATA_USER, users.stream().map(User::getId).collect(Collectors.toSet())); redisUtils.del(CacheKey.DEPT_ID + id); } -} \ No newline at end of file +} diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java index c7e45499..0e54fc92 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java @@ -61,7 +61,7 @@ public class MenuServiceImpl implements MenuService { @Override public List queryAll(MenuQueryCriteria criteria, Boolean isQuery) throws Exception { - Sort sort = new Sort(Sort.Direction.ASC, "menuSort"); + Sort sort = Sort.by(Sort.Direction.ASC, "menuSort"); if(isQuery){ criteria.setPidIsNull(true); List fields = QueryHelp.getAllFields(criteria.getClass(), new ArrayList<>()); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index f8690229..e8b41438 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -66,7 +66,7 @@ public class RoleServiceImpl implements RoleService { @Override public List queryAll() { - Sort sort = new Sort(Sort.Direction.ASC, "level"); + Sort sort = Sort.by(Sort.Direction.ASC, "level"); return roleMapper.toDto(roleRepository.findAll(sort)); } diff --git a/pom.xml b/pom.xml index a69c5d0d..0b8a4062 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.0.RELEASE + 2.2.10.RELEASE