当前位置: 首页 > article >正文

SpringBoot3集成Oauth2.1——4集成Swagger/OpenAPI3

文章目录

    • 访问在线文档页面
    • 配置OpenApiConfig

在我之前的文章中,写了 SpringBoot3集成OpenAPI3(解决Boot2升级Boot3)

访问在线文档页面

当我们同样在SpringBoot3使用oauth2.1也就是我之前的文章中写的。现在我们要处理下面这两个的问题了。

	<!-- 使用springdoc替代springfox集成swagger https://springdoc.org/ --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.8.6</version></dependency><!-- Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案 https://doc.xiaominfo.com/ --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version></dependency>

那就是要能访问到我们的openAPI页面,也就是

http://127.0.0.1:18080/doc.htmlhttp://127.0.0.1:18080/swagger-ui/index.html

将我们之前的defaultSecurityFilterChain修改即可。

	@Bean@Order(3)public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(authorize ->authorize.requestMatchers("/login",                 // 登录页面"/logout",                // 登出端点"/swagger-ui/**",         // Swagger UI"/v3/api-docs/**",        // OpenAPI文档"/webjars/**",            // WebJars资源"/swagger-resources/**",  // Swagger资源"/doc.html"               // Knife4j文档页面).permitAll().anyRequest().authenticated()).formLogin(Customizer.withDefaults()).logout(Customizer.withDefaults());return http.build();}

此时,就能访问了。
在这里插入图片描述

在这里插入图片描述
当然,访问嘛,肯定401
在这里插入图片描述
以我最常用的knife4j为例。在全局参数的地方,我们是看不到添加认证参数的,只有header和query。
在这里插入图片描述
查看官方:https://doc.xiaominfo.com/docs/action/oauth2-implicit,不难发现,确实有knife4j集成oauth的,不过从代码示例来看,Swagger还是2.x版本,而oauth2也是老版本以前的。所以这个集成就没有参考意义了,里面都是一些在SpringBoot3这个版本里面没有的。

所以我们得出了一个结论,那就是官方目前没有新版本的集成(2025年5月22日)
官方代码中,最后的 提交记录也是4年前。
在这里插入图片描述
看了下代码,其SpringBoot是2.2.x版本

在这里插入图片描述

在这里插入图片描述
所以,只能自己想办法了。折腾了一天,以下是参考的资料和文档(主要原因还是目前很多框架组件,其实对SprignBoot3还不是特别兼容,java8 + boot2是真的钉子户)
https://github.com/xiaoymin/knife4j/issues
https://doc.xiaominfo.com/docs/blog

思路就是,类似postman等接口测试一样,在请求中,添加认证参数
在这里插入图片描述

配置OpenApiConfig

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;/*** @Description: OpenAPI配置* @author: 胡涛* @mail: hutao_2017@aliyun.com* @date: 2025年5月22日12:26:35*/
@SpringBootConfiguration
public class OpenApiConfig implements WebMvcConfigurer {@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("用户统一平台").version("1.0").description("用户统一管理平台相关接口文档").contact(new Contact().name("Hutao").email("hutao_2017@aliyun.com"))).addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)).components(new Components().addSecuritySchemes(HttpHeaders.AUTHORIZATION,new SecurityScheme().name(HttpHeaders.AUTHORIZATION).type(SecurityScheme.Type.HTTP).scheme("Bearer").in(SecurityScheme.In.HEADER).bearerFormat("JWT")));}
}

这时候,我们将我们从其他地方获取到的token,放入到这里,记得前面添加Bearer
在这里插入图片描述
然而当调用接口,确发现,并没有请求头部参数
在这里插入图片描述
原来需要再访问的接口上面,加上SecurityRequirement

@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)

在这里插入图片描述
这时候就能看到请求头里面的认证参数了。
在这里插入图片描述
此时,就能正常请求了。
在这里插入图片描述
但是吧,这么多接口,咱总不能一个一个的加吧?我们可以实现GlobalOperationCustomizer来添加

import java.util.List;import org.springdoc.core.customizers.GlobalOperationCustomizer;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import lombok.extern.slf4j.Slf4j;@Slf4j
@Component
public class Knife4jOperationCustomizer implements GlobalOperationCustomizer {@Overridepublic Operation customize(Operation operation, HandlerMethod handlerMethod) {List<SecurityRequirement> security = operation.getSecurity();if (security == null) {security = List.of(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION));operation.setSecurity(security);}return operation;}
}
http://www.lryc.cn/news/2387011.html

相关文章:

  • 基于深度学习的情绪识别检测系统【完整版】
  • 本地依赖库的版本和库依赖的版本不一致如何解决?
  • Redis学习打卡-Day7-高可用(下)
  • Spark on Yarn 高可用模式部署流程
  • AI时代新词-大模型(Large Language Model)
  • 3d tiles高级样式设计与条件渲染
  • Linux中logger命令的使用方法详解
  • 博奥龙Nanoantibody系列IP专用抗体
  • webpack构建速度和打包体积优化方案
  • [IMX] 08.RTC 时钟
  • PG Craft靶机复现 宏macro攻击
  • Qt Creator快捷键合集
  • ElasticSearch--DSL查询语句
  • 海康威视摄像头C#开发指南:从SDK对接到安全增强与高并发优化
  • Redis(四) - 使用Python操作Redis详解
  • Kotlin全栈工程师转型路径
  • 如何利用 Spring Data MongoDB 进行地理位置相关的查询?
  • 服务器并发实现的五种方法
  • PYTORCH_CUDA_ALLOC_CONF基本原理和具体示例
  • 2025年系统架构师---综合知识卷
  • AI 抠图软件批量处理 + 发丝级精度,婚纱 / 玻璃一键抠透明 免安装
  • JVM 深度解析
  • 新能源汽车移动充电服务:如何通过智能调度提升充电桩可用率?
  • SpringCloud Alibaba微服务-- Sentinel的使用(笔记)
  • PARSCALE:大语言模型的第三种扩展范式
  • 在Windows上,将 Ubuntu WSL 安装并迁移到 D 盘完整教程(含 Appx 安装与迁移导入)
  • 企微获取会话内容,RSA 解密函数
  • MyBatis入门:快速搭建数据库操作框架 + 增删改查(CRUD)
  • 离线安装Microsoft 照片【笔记】
  • 地理卷积神经网络加权回归模型的详细实现方案