【Springboot知识】从零开始配置springfox
文章目录
- 配置过程
- 1. 添加依赖
- 2. 创建Swagger配置类
- 3. 配置Swagger UI
- 4. 自定义Swagger配置(可选)
- 4.1 添加全局请求参数
- 4.2 配置响应消息
- 5. 运行项目并访问Swagger UI
- 6. 其他注意事项
- 7. 使用Springfox 3.x(可选)
- 总结
- 忽略登录验证
- 1. **明确Swagger的相关路径**
- 2. **配置Spring Security忽略Swagger路径**
- 示例:配置Spring Security忽略Swagger路径
- 3. **确保Swagger配置正确**
- 4. **测试Swagger UI访问**
- 5. **其他注意事项**
- 6. **完整示例**
- 总结
配置过程
在Spring Boot项目中配置Springfox(Swagger)可以帮助你自动生成API文档。以下是详细的配置步骤:
1. 添加依赖
首先,在你的pom.xml文件中添加Springfox的依赖:
<dependencies><!-- Springfox Swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!-- Springfox Swagger UI --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency>
</dependencies>
2. 创建Swagger配置类
接下来,创建一个Swagger配置类来启用Swagger并配置一些基本信息。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.demo")) // 替换为你的控制器所在包.paths(PathSelectors.any()).build().apiInfo(apiInfo());}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Spring Boot Swagger Example API").description("This is a sample API documentation using Swagger").version("1.0.0").build();}
}
3. 配置Swagger UI
Springfox会自动配置Swagger UI,你可以通过以下URL访问Swagger UI界面:
http://localhost:8080/swagger-ui.html
4. 自定义Swagger配置(可选)
你可以根据需要进一步自定义Swagger的配置。例如,添加全局的请求参数、响应消息等。
4.1 添加全局请求参数
import springfox.documentation.service.Parameter;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.schema.ModelRef;@Bean
public Docket api() {ParameterBuilder parameterBuilder = new ParameterBuilder();parameterBuilder.name("Authorization").modelRef(new ModelRef("string")).parameterType("header").required(false).build();return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.demo")).paths(PathSelectors.any()).build().globalOperationParameters(Collections.singletonList(parameterBuilder.build())).apiInfo(apiInfo());
}
4.2 配置响应消息
import springfox.documentation.service.ResponseMessage;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.spi.DocumentationType;@Bean
public Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.demo")).paths(PathSelectors.any()).build().useDefaultResponseMessages(false).globalResponseMessage(RequestMethod.GET,Arrays.asList(new ResponseMessageBuilder().code(500).message("Internal Server Error").build(),new ResponseMessageBuilder().code(403).message("Forbidden").build())).apiInfo(apiInfo());
}
5. 运行项目并访问Swagger UI
启动你的Spring Boot项目,然后在浏览器中访问以下URL:
http://localhost:8080/swagger-ui.html
你应该能够看到自动生成的API文档,并且可以通过Swagger UI界面测试你的API。
6. 其他注意事项
- Spring Boot版本兼容性:确保你使用的Spring Boot版本与Springfox版本兼容。Springfox 2.x 支持Spring Boot 1.x 和 2.x,但如果你使用的是Spring Boot 3.x,可能需要使用Springfox 3.x或更高版本。
- Spring Security集成:如果你的项目使用了Spring Security,可能需要配置Swagger UI的访问权限。
7. 使用Springfox 3.x(可选)
如果你使用的是Spring Boot 3.x,可以考虑使用Springfox 3.x。配置步骤类似,但依赖和配置类可能会有所不同。
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
然后在配置类中使用@EnableSwagger2WebMvc注解:
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {// 配置内容同上
}
总结
通过以上步骤,你可以在Spring Boot项目中成功配置Springfox(Swagger),并生成API文档。你可以根据需要进一步自定义Swagger的配置,以满足项目的需求。
忽略登录验证
在Spring Boot项目中,如果你希望将Swagger相关的路径(如Swagger UI、API文档等)加入忽略登录的配置,可以通过Spring Security来实现。以下是详细的配置步骤:
1. 明确Swagger的相关路径
Swagger通常涉及以下路径:
/swagger-ui.html:Swagger UI界面。/v2/api-docs:Swagger生成的API文档(JSON格式)。/swagger-resources/**:Swagger资源文件。/webjars/**:Swagger UI依赖的静态资源。
这些路径需要被Spring Security忽略,以便无需登录即可访问。
2. 配置Spring Security忽略Swagger路径
在Spring Security配置类中,通过antMatchers方法将这些路径加入白名单,允许匿名访问。
示例:配置Spring Security忽略Swagger路径
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/swagger-ui.html", // Swagger UI界面"/v2/api-docs", // Swagger API文档"/swagger-resources/**", // Swagger资源文件"/webjars/**", // Swagger UI静态资源"/public/**" // 其他需要忽略登录的路径).permitAll() // 允许匿名访问.anyRequest().authenticated() // 其他路径需要登录.and().formLogin() // 启用表单登录.and().csrf().disable(); // 禁用CSRF(根据需求决定是否禁用)}
}
3. 确保Swagger配置正确
确保Swagger的配置类已经正确配置,并且能够生成API文档。以下是一个典型的Swagger配置类:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example.demo")) // 替换为你的控制器包名.paths(PathSelectors.any()).build().apiInfo(apiInfo());}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Spring Boot Swagger Example API").description("This is a sample API documentation using Swagger").version("1.0.0").build();}
}
4. 测试Swagger UI访问
启动Spring Boot项目后,访问以下URL,确保无需登录即可访问Swagger UI:
- Swagger UI界面:
http://localhost:8080/swagger-ui.html - API文档(JSON格式):
http://localhost:8080/v2/api-docs
如果配置正确,你应该能够直接访问这些页面,而不会被重定向到登录页面。
5. 其他注意事项
- CSRF保护:如果启用了CSRF保护,可能会影响Swagger UI的使用。可以通过
.csrf().disable()临时禁用CSRF,或者为Swagger路径单独配置CSRF忽略。 - 静态资源路径:如果Swagger UI的静态资源路径被Spring Security拦截,可能会导致页面加载不完整。确保
/webjars/**路径被正确忽略。 - Spring Boot 3.x:如果你使用的是Spring Boot 3.x,可能需要使用Springfox 3.x或更高版本,并调整相关配置。
6. 完整示例
以下是一个完整的Spring Security配置类,包含Swagger路径的忽略登录配置:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/swagger-ui.html", // Swagger UI界面"/v2/api-docs", // Swagger API文档"/swagger-resources/**", // Swagger资源文件"/webjars/**", // Swagger UI静态资源"/public/**" // 其他需要忽略登录的路径).permitAll() // 允许匿名访问.anyRequest().authenticated() // 其他路径需要登录.and().formLogin() // 启用表单登录.and().csrf().disable(); // 禁用CSRF(根据需求决定是否禁用)}
}
总结
通过以上配置,你可以将Swagger相关的路径加入Spring Security的忽略登录列表,确保Swagger UI和API文档可以无需登录即可访问。根据项目需求,你还可以进一步调整Spring Security的配置,例如添加OAuth2、JWT等认证方式。
相关文章:
【Springboot知识】从零开始配置springfox
文章目录 配置过程1. 添加依赖2. 创建Swagger配置类3. 配置Swagger UI4. 自定义Swagger配置(可选)4.1 添加全局请求参数4.2 配置响应消息 5. 运行项目并访问Swagger UI6. 其他注意事项7. 使用Springfox 3.x(可选)总结 忽略登录验证…...
PHP代驾系统小程序
🚗 代驾系统 —— 安全、便捷、智能的出行新选择 🔧 一款基于先进ThinkPHPUniapp技术架构,匠心独运的代驾软件横空出世,微信小程序端率先登场,为您的出行之旅增添前所未有的便捷与安全。它不仅是您贴心的出行助手&…...
pg认证需要培训机构吗
认证类型决定是否需要培训机构 官方认证 PostgreSQL社区认证:PostgreSQL社区并未强制要求通过培训机构才能参加认证考试。例如,PostgreSQL Professional Certification(由社区认可的机构提供)通常允许考生自学后直接报名考试。 Po…...
网络安全扫描--基础篇
前言 1、了解互联网安全领域中日趋重要的扫描技术 2、了解在不同网络场景下扫描技术手段 3、熟悉linux下系统内核防护策略并能大件一个有效的系统防护体系 4、增强工作安全意识,并能有效的实践于工作场景中 目录 1、熟悉主机扫描工具(fping,…...
【MySQL数据库】Ubuntu下的mysql
目录 1,安装mysql数据库 2,mysql默认安装路径 3,my.cnf配置文件? 4,mysql运用的相关指令及说明 5,数据库、表的备份和恢复 mysql是一套给我们提供数据存取的,更加有利于管理数据的服务的网络程序。下…...
GPQA (Graduate-Level Google-Proof QA Benchmark) 数据集
标题:挑战人类与AI的极限:GPQA——一个面向未来的高难度科学问答基准 引言 在人工智能快速发展的今天,大型语言模型(如GPT-4)已能在许多任务中媲美甚至超越人类表现。然而,当面对需要高度专业知识的问题时&…...
WebRTC与EasyRTC:开启智能硬件音视频通讯的全新旅程
在当今数字化时代,音视频通讯技术正以前所未有的速度革新着我们的生活与工作方式。WebRTC与EasyRTC作为这一领域的佼佼者,正携手为智能硬件的音视频通讯注入强大动力,开启全新的篇章。 一、WebRTC与智能硬件融合的崭新趋势 WebRTC技术&…...
利用ffplay播放udp组播视频流
ffplay -fs -fflags nobuffer -flags low_delay -analyzeduration 0 -probesize 32 -framedrop -sync ext -strict experimental udp://224.1.1.1:5001 -fs : 全屏显示 -fflags nobuffer : 禁用输入缓冲(减少100-200ms缓冲延迟) -an…...
基于Ceedling的嵌入式软件单元测试
Ceedling 如果你使用 Ceedling(一个针对 C 代码单元测试的构建管理器),可以更方便地管理测试。Ceedling 会自动处理 Unity 和 CMock 的集成,无需手动编写 Makefile。 1.环境搭建 1.1 Ruby环境 sudo apt-get install ruby1.2 安…...
一文深入了解DeepSeek-R1:模型架构
本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型,以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 📝 1. 输入上下文长度 DeepSeek-R1的输入上下文长…...
机试题——快乐时间
题目描述 小明在工作之余喜欢在电子书城阅读不同的书籍并且获得最大的满足感,因此根据书城针对每本书籍的评分收集了 n 个书籍的打分清单 books,例如第一本书的打分 books[0]5 代表该书的满意程度为 5,第二本书 books[1]-2 代表该书的满意程…...
2024年终总结和2025年规划
2024年的主线是AI基础的学习和读书,虽然AI学习花费了更多的时间,但是读书长久看来于我是更重要的事情,哈哈哈,因此先简单回顾一下读书记忆,回顾我的2024,再展望一下我的2025. 我的2024年记忆 读万卷书&am…...
5 .TCP传输 文件/数据
文件传输 本质:客户端通过标准IO或者文件IO,读取文件中的信息 然后将读取到的信息,通过套接字发送给服务器 服务器接收到后,立刻通过标准IO或者文件IO写到文件 这个过程,服务器要知道2件事 1:客户端发来的文件名字 …...
哈希表(典型算法思想)—— OJ例题算法解析思路
目录 一、1. 两数之和 - 力扣(LeetCode) 算法代码: 1. 问题描述 2. 核心思路 3. 代码实现思路 (1)初始化哈希表 (2)遍历数组 (3)返回结果 4. 时间复杂度分析 …...
CloudberryDB(七)二级索引
在CloudberryDB中,二级索引的概念与PostgreSQL中的类似。但是,由于分布式特性,创建和使用二级索引需要考虑一些额外的因素。以下是关于二级索引的一些要点: 1. **创建索引**:在Greenplum中,可以使用CREATE…...
学习web数据埋点
什么是埋点,以及为什么需要埋点 通过代码主动收集用户行为数据(如点击、浏览、停留时长等),用于数据分析驱动产品优化。 一、前端埋点 在客户端(浏览器、移动端应用)直接采集用户行为数据,通…...
Next.js【详解】CSS 样式方案
全局样式 Global CSS 默认已创建,即 src\app\globals.css,可根据需要修改 默认在全局布局中导入 src\app\layout.tsx import "./globals.css";组件样式 CSS Modules 新建文件 src\app\test\styles.module.css .red {color: red;}导入目标页面…...
HCIA项目实践--RIP相关原理知识面试问题总结回答
9.4 RIP 9.4.1 补充概念 什么是邻居? 邻居指的是在网络拓扑结构中与某一节点(如路由器)直接相连的其他节点。它们之间可以直接进行通信和数据交互,能互相交换路由信息等,以实现网络中的数据转发和路径选择等功能。&am…...
无人机信号调制技术原理
一、调制技术的必要性 频谱搬移:将低频的基带信号搬移到高频的载波上,便于天线辐射和传播。 信道复用: 利用不同的载波频率或调制方式,实现多路信号同时传输,提高信道利用率。 抗干扰: 通过选择合适的调…...
Qt——连接MySQL数据库之编译数据库驱动的方法详细总结(各版本大同小异,看这一篇就够了)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…...
leetcode-495.提莫攻击
leetcode-495.提莫攻击 文章目录 leetcode-495.提莫攻击一.题目描述二.代码提交三.解释 一.题目描述 二.代码提交 #include <vector> using namespace std;int findPoisonedDuration(vector<int>& timeSeries, int duration) {int total 0;for (int i 0; i …...
计算机网络知识速记 :HTTP多个TCP连接的实现方式
计算机网络知识速记 :HTTP多个TCP连接的实现方式 在当今互联网高速发展的背景下, web 应用程序对性能的要求日益增加。在众多网络协议中,HTTP (超文本传输协议) 的性能优化显得尤为重要,尤其是在多个TCP连接的管理和实现上。 引…...
5、《Spring Boot自动配置黑魔法:原理深度剖析》
Spring Boot自动配置黑魔法:原理深度剖析 一、引言:为什么Spring Boot能“开箱即用”? Spring Boot的核心理念是**“约定优于配置”,开发者只需引入一个spring-boot-starter-web依赖,就能直接编写RESTful API…...
Django 创建表时 “__str__ ”方法的使用
在 Django 模型中,__str__ 方法是一个 Python 特殊方法(也称为“魔术方法”),用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时,应该返回什么样的内容。 示例: 我在初学ModelForm时尝…...
CUDA-内存访问模式
在 GPU 计算中,内存访问模式 直接影响程序的性能,尤其是 全局内存(global memory) 访问的合并性(coalescing)和局部性(locality)。 1. GPU 内存层次结构 GPU 具有多级存储ÿ…...
img标签的title和alt
img标签的title和alt 显示上 title:鼠标移入到图片上时候显示的内容; alt:图片无法加载时候显示的内容; <div class"box"><div><!-- title --><h3>title</h3><img src"./image/poster.jpg" title"这是封…...
【一文读懂】HTTP与Websocket协议
HTTP协议 概述 HTTP (Hypertext Transfer Protocol),即超文本传输协议,是一种用于在客户端和服务器之间传输超文本(例如网页、图片、音频、视频等)的通信协议。它是万维网(WWW)的基础,负责在浏…...
Grafana——如何迁移Grafana到一台新服务器
背景 有时候由于服务器更新之类的,我们需要迁移一整套Grafana,这时候该怎么操作呢? 下面让我一步步说明下 安装Grafana 在新的服务器上安装Grafana 这个不再赘述,可以看一下我之前的文章 备份及迁移 迁移配置文件 配置文件即…...
android 源码切换分支
在Android源码(通常是指Android操作系统的源代码,比如AOSP - Android Open Source Project)中进行分支切换,你需要使用Git这一版本控制系统。以下是切换分支的基本步骤: 确保你在工作目录中: 首先&…...
Flutter中 List列表中移除特定元素
在 Dart 语言里,若要从子列表中移除特定元素,可以使用以下几种方法,下面为你详细介绍: 方法一:使用 where 方法创建新列表 where 方法会根据指定的条件筛选元素,然后通过 toList 方法将筛选结果转换为新列…...
