From 8d020045b785571f93104966a649df3bb2fe8737 Mon Sep 17 00:00:00 2001 From: xiongfeng Date: Tue, 26 Jul 2022 11:53:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=8D=E4=BD=8Espringboot=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=B8=BA2.4.6=EF=BC=8C=E4=B8=BA=E4=BA=86=E6=9B=B4=E5=A5=BD?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=85=B6=E4=BB=96=E6=A1=86=E6=9E=B6=E3=80=82?= =?UTF-8?q?=20=E6=95=B4=E5=90=88knife4j=E7=94=9F=E6=88=90=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- .../xf/basedemo/common/model/LoginInfo.java | 2 +- .../basedemo/common/utils/JwtTokenUtils.java | 4 +- .../config/SpringFoxSwaggerConfig.java | 77 ++++++++----------- .../cn/xf/basedemo/config/WebMvcConfig.java | 23 ++++++ .../{ => business}/UserController.java | 7 +- .../controller/{ => web}/WebController.java | 5 +- .../interceptor/TokenInterceptor.java | 3 +- .../xf/basedemo/model/res/LoginInfoRes.java | 4 + .../service/impl/UserServiceImpl.java | 4 +- src/main/resources/application.yml | 16 ---- 11 files changed, 73 insertions(+), 76 deletions(-) create mode 100644 src/main/java/cn/xf/basedemo/config/WebMvcConfig.java rename src/main/java/cn/xf/basedemo/controller/{ => business}/UserController.java (90%) rename src/main/java/cn/xf/basedemo/controller/{ => web}/WebController.java (84%) diff --git a/pom.xml b/pom.xml index 224eddb..42b1ddf 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.0 + 2.4.6 cn.xf @@ -57,7 +57,7 @@ com.github.xiaoymin knife4j-spring-boot-starter - 3.0.3 + 2.0.2 diff --git a/src/main/java/cn/xf/basedemo/common/model/LoginInfo.java b/src/main/java/cn/xf/basedemo/common/model/LoginInfo.java index 14ba7d4..12597ad 100644 --- a/src/main/java/cn/xf/basedemo/common/model/LoginInfo.java +++ b/src/main/java/cn/xf/basedemo/common/model/LoginInfo.java @@ -1,7 +1,7 @@ package cn.xf.basedemo.common.model; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.Data; -import org.apache.commons.lang3.StringUtils; /** * @program: xf-boot-base diff --git a/src/main/java/cn/xf/basedemo/common/utils/JwtTokenUtils.java b/src/main/java/cn/xf/basedemo/common/utils/JwtTokenUtils.java index 1046d89..b99f172 100644 --- a/src/main/java/cn/xf/basedemo/common/utils/JwtTokenUtils.java +++ b/src/main/java/cn/xf/basedemo/common/utils/JwtTokenUtils.java @@ -6,10 +6,8 @@ import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.TokenExpiredException; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - import java.util.Date; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/cn/xf/basedemo/config/SpringFoxSwaggerConfig.java b/src/main/java/cn/xf/basedemo/config/SpringFoxSwaggerConfig.java index 9916e8d..ef6ba16 100644 --- a/src/main/java/cn/xf/basedemo/config/SpringFoxSwaggerConfig.java +++ b/src/main/java/cn/xf/basedemo/config/SpringFoxSwaggerConfig.java @@ -1,19 +1,8 @@ package cn.xf.basedemo.config; -import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; -import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties; -import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; -import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType; -import org.springframework.boot.actuate.endpoint.ExposableEndpoint; -import org.springframework.boot.actuate.endpoint.web.*; -import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier; -import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier; -import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; -import org.springframework.util.StringUtils; -import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; @@ -23,10 +12,9 @@ import springfox.documentation.service.Contact; import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; +import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.ArrayList; -import java.util.Collection; import java.util.List; /** @@ -37,45 +25,46 @@ import java.util.List; * @create: 2022-06-16 16:44 **/ @Configuration -@EnableKnife4j +@EnableSwagger2 public class SpringFoxSwaggerConfig { @Bean - public Docket createRestApi() { + public Docket docket(Environment environment) { + // 添加接口请求头参数配置 没有的话 可以忽略 + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList<>(); + tokenPar.name("token") + .description("令牌") + .defaultValue("") + .modelRef(new ModelRef("string")) + .parameterType("header").required(false).build(); + pars.add(tokenPar.build()); return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) + //是否启动swagger 默认启动 + .enable(true) + //所在分组 + .groupName("base") .select() - .apis(RequestHandlerSelectors.basePackage("com.didiplus")) + //指定扫描的包路径 + .apis(RequestHandlerSelectors.basePackage("cn.xf.basedemo.controller.business")) .paths(PathSelectors.any()) - .build(); + .build() + .globalOperationParameters(pars); } - private ApiInfo apiInfo() { - Contact contact =new Contact("","",""); - return new ApiInfoBuilder() - .title("SpringBoot项目 后台服务API接口文档") - .description("使用 knife4j 搭建的后台服务API接口文档") - .termsOfServiceUrl("http://localhost:8088/") - .contact(contact) - .version("1.0.0") - .build(); + private ApiInfo apiInfo() { + Contact author = new Contact("reamindertime", "https://blog.csdn.net/qq_39818325?type=blog", "2439534736@qq.com"); + return new ApiInfo( + "开箱即用springboot基础项目文档", + "开箱即用springboot基础项目文档", + "1.0", + "", + author, + "", + "", + new ArrayList() + ); } - /** - * 增加如下配置可解决Spring Boot 6.x 与Swagger 3.0.0 不兼容问题 - **/ - @Bean - public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) { - List> allEndpoints = new ArrayList(); - Collection webEndpoints = webEndpointsSupplier.getEndpoints(); - allEndpoints.addAll(webEndpoints); - allEndpoints.addAll(servletEndpointsSupplier.getEndpoints()); - allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints()); - String basePath = webEndpointProperties.getBasePath(); - EndpointMapping endpointMapping = new EndpointMapping(basePath); - boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath); - return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null); - } - private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) { - return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT)); - } + } diff --git a/src/main/java/cn/xf/basedemo/config/WebMvcConfig.java b/src/main/java/cn/xf/basedemo/config/WebMvcConfig.java new file mode 100644 index 0000000..9c61b55 --- /dev/null +++ b/src/main/java/cn/xf/basedemo/config/WebMvcConfig.java @@ -0,0 +1,23 @@ +package cn.xf.basedemo.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; + +/** + * @program: xf-boot-base + * @ClassName WebMvcConfig + * @description: 放行Knife4j请求 + * @author: xiongfeng + * @create: 2022-07-26 11:17 + **/ +@Configuration +public class WebMvcConfig extends WebMvcConfigurationSupport { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + +} \ No newline at end of file diff --git a/src/main/java/cn/xf/basedemo/controller/UserController.java b/src/main/java/cn/xf/basedemo/controller/business/UserController.java similarity index 90% rename from src/main/java/cn/xf/basedemo/controller/UserController.java rename to src/main/java/cn/xf/basedemo/controller/business/UserController.java index c6d5983..8d34f17 100644 --- a/src/main/java/cn/xf/basedemo/controller/UserController.java +++ b/src/main/java/cn/xf/basedemo/controller/business/UserController.java @@ -1,4 +1,4 @@ -package cn.xf.basedemo.controller; +package cn.xf.basedemo.controller.business; import cn.xf.basedemo.common.model.LoginUser; import cn.xf.basedemo.common.model.RetObj; @@ -6,8 +6,7 @@ import cn.xf.basedemo.interceptor.SessionContext; import cn.xf.basedemo.model.res.LoginInfoRes; import cn.xf.basedemo.service.UserService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -38,7 +37,7 @@ public class UserController { } @ApiOperation(value = "用户信息", notes = "用户信息") - @ApiOperationSupport(order = 1) + @ApiOperationSupport(order = 2) @PostMapping("/info") public RetObj info(){ LoginUser loginUser = SessionContext.getInstance().get(); diff --git a/src/main/java/cn/xf/basedemo/controller/WebController.java b/src/main/java/cn/xf/basedemo/controller/web/WebController.java similarity index 84% rename from src/main/java/cn/xf/basedemo/controller/WebController.java rename to src/main/java/cn/xf/basedemo/controller/web/WebController.java index a0461a7..3ba9741 100644 --- a/src/main/java/cn/xf/basedemo/controller/WebController.java +++ b/src/main/java/cn/xf/basedemo/controller/web/WebController.java @@ -1,8 +1,9 @@ -package cn.xf.basedemo.controller; +package cn.xf.basedemo.controller.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; /** * @program: xf-boot-base @@ -34,7 +35,7 @@ public class WebController { * @Param [url] * @return java.lang.String **/ - @RequestMapping(value = "/{url}") + @RequestMapping(value = "/{url}", method = RequestMethod.GET) public String skipUrl(@PathVariable(name = "url") String url) { return url; } diff --git a/src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java b/src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java index 18003e3..7529c62 100644 --- a/src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java +++ b/src/main/java/cn/xf/basedemo/interceptor/TokenInterceptor.java @@ -3,10 +3,9 @@ package cn.xf.basedemo.interceptor; import cn.xf.basedemo.common.model.LoginUser; import cn.xf.basedemo.common.utils.ApplicationContextUtils; import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.util.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; diff --git a/src/main/java/cn/xf/basedemo/model/res/LoginInfoRes.java b/src/main/java/cn/xf/basedemo/model/res/LoginInfoRes.java index 965bb47..c22eb37 100644 --- a/src/main/java/cn/xf/basedemo/model/res/LoginInfoRes.java +++ b/src/main/java/cn/xf/basedemo/model/res/LoginInfoRes.java @@ -1,5 +1,7 @@ package cn.xf.basedemo.model.res; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -10,10 +12,12 @@ import lombok.Data; * @create: 2022-07-04 11:46 **/ @Data +@ApiModel(value = "登录请求对象") public class LoginInfoRes { /** * 登录密文 */ + @ApiModelProperty(value = "encryptedData", name = "登录密文") private String encryptedData; } diff --git a/src/main/java/cn/xf/basedemo/service/impl/UserServiceImpl.java b/src/main/java/cn/xf/basedemo/service/impl/UserServiceImpl.java index 7145663..8ae9115 100644 --- a/src/main/java/cn/xf/basedemo/service/impl/UserServiceImpl.java +++ b/src/main/java/cn/xf/basedemo/service/impl/UserServiceImpl.java @@ -15,10 +15,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -65,7 +65,7 @@ public class UserServiceImpl implements UserService { e.printStackTrace(); return RetObj.error("账号或密码错误"); } - if (StringUtils.isNotBlank(loginInfo.check())) { + if (!StringUtils.isEmpty(loginInfo.check())) { return RetObj.error(loginInfo.check()); } //校验登录账号密码 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e9fa59d..e0c7cb4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -17,9 +17,6 @@ spring: serialization: WRITE_DATES_AS_TIMESTAMPS: false FAIL_ON_EMPTY_BEANS: false - mvc: - pathmatch: - matching-strategy: ant_path_matcher @@ -38,19 +35,6 @@ mybatis-plus: # 删除后 logic-delete-value: 0 -knife4j: - enable: true - production: false # 生产环境配置需设为true - basic: - enable: false # 开启Swagger的Basic认证功能,默认是false - username: lianlian # Basic认证用户名 - password: lianlian123 # Basic认证密码 -swagger: - title: springboot基础框架 - description: springboot基础框架 - version: 1.0.0 - base-package: cn.xf.basedemo.controller - # 参考文章 https://zhuanlan.zhihu.com/p/145359625 management: endpoints: