文章目录

  • 集成Swagger、Knif4j
    • 依赖
    • 配置
    • 演示

集成Swagger、Knif4j

依赖

pom.xml

        <!-- 引入Knife4j的官方start包,Swagger2基于Springfox2.10.5项目--><!-- 访问 http://ip:port/doc.html --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version><exclusions><!--集成版本有漏洞,故剔除然后升级版本--><exclusion><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion><exclusion><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId></exclusion></exclusions></dependency><!-- https://mvnrepository.com/artifact/com.google.guava/guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version></dependency><!-- https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter --><!-- 访问 http://ip:port/swagger-ui/  不在是原来的 http://ip:port/swagger-ui.html/,如果需要自行重定向即可 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>${springfox.version}</version><exclusions><exclusion><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId></exclusion></exclusions></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId><version>1.5.21</version><scope>compile</scope></dependency>

配置

特别注意事项:knif4j的配置https://doc.xiaominfo.com/docs/quick-start


SpringConfig.java - 配置类

package work.linruchang.lrcutilsweb.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import work.linruchang.lrcutilsweb.config.handlerInterceptor.ApiDocHandlerInterceptor;
import work.linruchang.lrcutilsweb.util.convert.BeanConvertFactory;import javax.annotation.PostConstruct;/*** @author LinRuChang* @version 1.0* @date 2022/09/20* @since 1.8**/
@Configuration
public class SpringConfig  implements WebMvcConfigurer {@Value("${sys.swagger.author-name}")private String authorName;@Value("${sys.swagger.author-url}")private String authorUrl;@Value("${sys.swagger.author-email}")private String authorEmail;@Value("${sys.name}")private String sysName;@AutowiredApiDocHandlerInterceptor apiDocHandlerInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(apiDocHandlerInterceptor).addPathPatterns("/doc.html","/swagger-ui/","/swagger-ui.html");}/**** @param registry*/@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addRedirectViewController("/swagger-ui.html", "/swagger-ui/");registry.addRedirectViewController("/swagger-ui.html/", "/swagger-ui/");}@Beanpublic Docket customDocketBean() {return new Docket(DocumentationType.SWAGGER_2).enable(true).apiInfo(new ApiInfoBuilder().description("个人在线工具类网站后台接口API").termsOfServiceUrl("https://doc.xiaominfo.com/").contact(new Contact(authorName,authorUrl,authorEmail)).version("1.0").build()).groupName("lrc-utils-web-api").select().apis(RequestHandlerSelectors.basePackage("work.linruchang.lrcutilsweb.controller")).paths(PathSelectors.any()).build();}}


ApiDocHandlerInterceptor.java - Api文档账号密码校验拦截器 - 使用Basic认证

package work.linruchang.lrcutilsweb.config.handlerInterceptor;import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import work.linruchang.lrcutilsweb.service.SysDictService;
import work.linruchang.lrcutilsweb.util.EnhanceSpringUtil;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;/*** Api拦截器** @author LinRuChang* @version 1.0* @date 2022/11/28* @since 1.8**/
@Component
@Slf4j
public class ApiDocHandlerInterceptor implements HandlerInterceptor {@AutowiredSysDictService sysDictService;/*** 进入方法前* @param request current HTTP request* @param response current HTTP response* @param handler chosen handler to execute, for type and/or instance evaluation* @return* @throws Exception*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {boolean authStatusFlag = false;String authorization = EnhanceSpringUtil.getCurrentRequestHeader("Authorization");log.info("Api接口文档认证信息【Authorization】:{}", authorization);String authType = null;String authInfoCredentials = null;String userName = null;List<String> authorizationInfos = StrUtil.splitTrim(authorization, StrUtil.SPACE);if(CollUtil.size(authorizationInfos) == 2) {authType = authorizationInfos.get(0);authInfoCredentials = authorizationInfos.get(1);if (StrUtil.isNotBlank(authInfoCredentials)) {if (StrUtil.equalsAnyIgnoreCase(authType, "BASIC")) {String authInfo = Base64.decodeStr(authInfoCredentials);List<String> authInfos = StrUtil.splitTrim(authInfo, StrUtil.COLON);userName = CollUtil.size(authInfos) >= 2 ? authInfos.get(0) : null;String password =  CollUtil.size(authInfos) >= 2 ? authInfos.get(1) : null;//这里自行获取数据库中的用户、密码信息进行校验是否正确Dict dbUserInfo = getApiSwaggerUserInfo(userName);if(dbUserInfo != null && StrUtil.equals(password,dbUserInfo.getStr("password"))) {authStatusFlag = true;}}}}//认证失败if (!authStatusFlag) {response.setHeader("WWW-Authenticate", StrUtil.format("{} realm=\"请填写正确的Api文档管理员账号、密码信息\"", StrUtil.blankToDefault(authType,"BASIC")));response.setStatus(401);return false;}//认证成功return true;}public Dict getApiSwaggerUserInfo(String loginName) {Dict swaggerConfig = sysDictService.getSwaggerConfig();if(StrUtil.equals(loginName,swaggerConfig.getStr("loginName"))) {return  swaggerConfig;}return null;}
}

演示


swagger文档访问


knif4j文档访问

//注意:
无退出登录,如果需要退出,自行删除浏览器缓存,或者直接使用谷歌插件【清除历史记录,缓存和Cookie Chrome】进行删除缓存即可

SpringBoot - 集成Swagger、Knif4j接口文档以及文档添加账号密码登录相关推荐

  1. SpringBoot集成swagger生成在线接口文档

    SpringBoot集成swagger生成在线接口文档 集成maven依赖 <dependency><groupId>io.springfox</groupId>& ...

  2. springboot集成swagger2测试接口

    springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...

  3. 20190909 SpringBoot集成Swagger

    SpringBoot集成Swagger 1. 引入依赖 // SpringBoot compile('org.springframework.boot:spring-boot-starter-web' ...

  4. springboot集成swagger页面空白解决方法

    今天在个人springboot项目使用swagger时遇到页面始终空白的问题,就顺便贴个博文,简单写下springboot集成swagger,并记录下问题. 1. 引入依赖包 <dependen ...

  5. 【水滴石穿】SpringBoot 集成Swagger

    SpringBoot 集成Swagger Swagger 可以使你的restful接口自动生成接口文档,方便查看与测试,下面是一些具体步骤: 1.引入swagger相关依赖 <dependenc ...

  6. Springboot集成Swagger

    Springboot集成Swagger 1. Swagger概述 2. Swagger注解说明 3. Springboot集成Swagger 3.1 引入依赖 3.2 工具类 3.3 配置类 3.4 ...

  7. [Swagger2]SpringBoot集成Swagger

    SpringBoot集成Swagger 引入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 ...

  8. springboot 集成 swagger 自动生成API文档

    Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.简单来说,Swagger是一个功能强大的接口管理工具,并且提供了多种编程语言的前后端分离解决方案. S ...

  9. SpringBoot——SpringBoot集成Swagger生成API文档

    文章目录: 1.写在前面 2.步骤详解 2.1 pom文件中添加Swagger依赖 2.2 在application.properties核心配置文件中配置Swagger 2.3 编写需要生成API文 ...

最新文章

  1. 在我方某前沿防守地域 matlab,蒙特卡洛方法模拟小例子
  2. 用python画图代码比卡丘-Python选修课第二届Turtle绘图大赛 (皮卡丘)
  3. java 类集合_java集合类详解
  4. sqlserver空间数据 + c# 实现查询附近的设备
  5. 「镁客·请讲」归墟电子王景阳:以桌面小型机器人切入市场,沿着“机器人+教育”的方向前进...
  6. 【指纹识别】基于matlab GUI指纹识别【含Matlab源码 1353期】
  7. GitHub客户端上传本地代码
  8. RPC框架简析--Pigeon
  9. 修改docker时区为北京时间
  10. echarts 3D地球
  11. Verilog HDL三种描述方式
  12. Docker入门讲解
  13. 类似淘票票 选座功能(svg)
  14. 在Java中实现 点击返回按钮返回上一个页面
  15. OpenCV开发笔记(五十五):红胖子8分钟带你深入了解Haar、LBP特征以及级联分类器识别过程(图文并茂+浅显易懂+程序源码)
  16. 应届生,你为什么那么想做产品经理
  17. KSO-C#语言2021年落选,Python获年度编程语言
  18. ubuntu18.04重新安装nvidia驱动
  19. 2021年熔化焊接与热切割免费试题及熔化焊接与热切割模拟考试题库
  20. 小技巧:使用谷歌地图查询公交和地铁信息

热门文章

  1. notepad++ 16进制数字加前缀0x
  2. table中英文值显示其对应中文
  3. Delphi FireDAC 出现[FireDAC][DatS]-32. Variable length column [*] overflow. Value length - [*]
  4. 摆脱处男_是时候摆脱我们的密码了
  5. synchonized只能回答加锁?深入解析,关于锁升级流程的各项细节
  6. 身份证识别、驾驶证识别、行驶证识别
  7. 计算机考研408每日一题 day76
  8. iMAX B6AC充电的时报错:BATTERY CHECK LOW VOLTAGE
  9. 使用预装Win10的戴尔电脑最新恢复出厂设置方法
  10. 站长应该如何挖掘长尾关键词