了解官方Swagger Starter后再回顾Spring Boot

Spring Security保护Swagger UI:三种访问控制方案详解 API文档是系统对外暴露的重要接口,其安全性不容忽视。在微服务架构和前后端分离的背景下,API文档管理工具如Swagger UI极大提升了开发效率,但默认无防护的访问方式也带来了信息泄露风险。其核心原理是在应用层或网络层增加认证拦截,通过用户名密码等机制验证访问者身份。这一技术实践的价值在于实现安全与便利的平衡,既保障了内部协作效率,又防止了接口架构和敏感数据的意外暴露。典型的应用场景包括内部系统上线后公网可访问的Swagger文档、微服务网关下的API文档集中管理,以及需要区分不同角色访问权限的开发测试环 阅读详情

springfox终于给Swagger做了个Spring Boot Starter了,看来我自己写的swagger starter可以在不久后可以退役了。

为什么之前官方不出相应的Spring Boot Starter

刚开始接触到Spring Boot时,很疑惑为什么Swgger作为一款流行的文档框架却没有自己的Spring Boot Starter。后来为了自己的方便,手撸了一套给自己用的starter,当时也因此了解了Spring Boot是如何进行自动化配置的,配置文件里的配置提示是读取哪个文件的。在撸starter的过程也发现,Swagger中的对象创建基本都是使用Builder构造器模式的,如通过ApiInfoBuilder创建ApiInfo:

public class ApiInfoBuilder {
   ......
  public ApiInfo build() {
    return new ApiInfo(title, description, version, termsOfServiceUrl, contact, license, licenseUrl, vendorExtensions);
  }
}
复制代码

而ApiInfo类中是没有setter的,属性都是通过构造函数设置的:

public class ApiInfo {
  ......
  
  public ApiInfo(......) {
    ......
  }
  
  ......
}  
复制代码

众所周知,Java属性的通用设置方式有2种:构造方法、setter方法。像Spring Boot这种如此通用的框架肯定会使用最通用的方式以获得最广泛的框架兼容:通过配置文件的属性名找到相应的setter方法并进行属性注入。而Swagger这种以Builder模式设置属性自然无法兼容,因为Spring Boot读取了配置属性也找不到相应的setter方法,如果swagger要想Spring Boot兼容,主要有以下2种方式:

  1. 官方方式:将Builder模式设置属性改为setter
  2. 非官方方式:创建新的属性配置类再创建Bean到容器中,像个人比较久之前写的swagger starter就是以这种方式,如:
@Setter
@ToString
public class ApiInfoProperties {

    private String version;
    private String title;
    private String description;
    private String termsOfServiceUrl;
    private String license;
    private String licenseUrl;
    private ContactProperties contact = new ContactProperties();

    ApiInfo toApiInfo() {
        return new ApiInfo(title, description, version, termsOfServiceUrl, contact.toContact(), license, licenseUrl, Collections.emptyList());
    }
}
复制代码

目前官方的Swagger Starter只支持了基础功能的属性配置, 像一些路径过滤(path-selector)、全局参数/header(global-parameters)、安全校验(security-schema、security-contexts)的自动化配置还没做,不过springfox选择兼容Spring Boot的方式如无意外都会是官方方式,即将Builder改为setter,以下是目前官方starter的一个配置类摘要:

@ConfigurationProperties("springfox.documentation")
public class SpringfoxConfigurationProperties {
  private boolean autoStartup = true;
  private boolean enabled = true;
  @NestedConfigurationProperty
  private SwaggerConfigurationProperties swagger;
  @NestedConfigurationProperty
  private OpenApiConfigurationProperties openApi;
  @NestedConfigurationProperty
  private SwaggerUiConfigurationProperties swaggerUi;

  public boolean isAutoStartup() {
    return autoStartup;
  }

  public void setAutoStartup(boolean autoStartup) {
    this.autoStartup = autoStartup;
  }
  
  ......
}
复制代码

Swagger 3.0进行了哪些改进

具体改进点可以在官文文档查看,个人就简单列几个个人认为比较重要的:

  • 支持webflux,之前有项目使用webflux的就有点郁闷Swagger不支持,要支持的话也只能靠Swagger 3.0的SNAPSHOT实属麻烦,最后还是用回postman
  • 移除了第三方的依赖库,如guava,之前版本的这些依赖库个人也是认为比较让人诟病的,因为这些依赖库基本大部分项目里都会有导致重复
  • 添加了springfox-boot-starter,可支持传统web与响应式webflux,目前只提供了简单的功能
  • 移除了@EnableSwagger2注解,简化了配置,更改了文档地址,目前只需引入starter依赖运行项目即可访问http://host:port/{context-path}/swagger-ui/查看接口文档

快速开始

添加依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
复制代码

启动项目访问Swagger地址

以上是一个无配置的官方swagger starter demo,但其实有配置界面也差不多,因为starter目前还不支持ApiInfo、SecurityContext之类的配置,更多的项目配置例子(如webflux)可参考文末官方例子。swagger starter的配置都是以springfox.documentation为前缀的,具体的就不说了,可以直接在配置文件中看提示文档。

 

Spring Boot拦截器excludePathPatterns失效的五大根因与实战解决方案 在Web应用开发中,拦截器是实现统一请求处理(如权限校验、日志记录)的核心组件。其工作原理是基于路径模式匹配,决定哪些请求需要经过预处理。理解其匹配机制(如Ant风格模式)对于实现灵活的访问控制至关重要,这直接关系到系统的安全性与可维护性。在实际工程中,拦截器的路径排除配置(excludePathPatterns)若失效,会导致公开接口被错误拦截,引发功能异常。常见场景包括多拦截器冲突、路径模式书写偏差或Spring Boot自动配置干扰。本文将深入剖析导致配置失效的五大根因,并提供从精确修正路径模式、规范 阅读详情

相关推荐

Linux服务器安全加固实战:Cockpit与Swagger UI漏洞修复指南

在服务器安全领域,访问控制与最小权限原则是保障系统安全的核心概念。其原理在于通过严格限制用户、进程和服务的权限,将潜在攻击面降至最低。这一理念对于构建纵深防御体系具有重要技术价值,尤其在管理Web服务与API接口时,能有效防止未授权访问与信息泄露。常见的应用场景包括配置Web管理面板、保护API文档接口以及加固网络服务。本文聚焦于Linux环境中两个典型风险点:Cockpit管理面板与Swagger UI接口的默认配置暴露问题。通过剖析其认证漏洞与会话管理风险,提供从网络层隔离、运行时禁用到构建时剥离的立体

weixin_33912246的博客 328

Swagger3.0官方starter诞生,可以扔掉那些野生starter了

Swagger3.0官方starter诞生,可以扔掉那些野生starter了swagger介绍对于 Rest API 来说很重要的一部分内容就是文档,Swagger 为我们提供了一套通过...

xmt1139057136的专栏 713

告别手写YAML:用Spec4j实现Java REST API规范自动生成

在微服务架构中,REST API作为服务间通信的核心契约,其规范定义与维护是开发流程的关键环节。OpenAPI规范通过标准化的YAML/JSON格式描述API接口,为文档生成、客户端SDK构建和接口测试提供了统一基础。传统手动编写规范文件的方式存在维护成本高、易与代码脱节等痛点,违背了DRY原则。Spec4j工具通过“规范即代码”理念,从Java控制器和DTO中自动提取信息生成OpenAPI规范,实现了规范与代码的实时同步。该技术方案特别适用于Spring Boot项目,能自动识别@RestControll

weixin_34413802的博客 570

重磅:Swagger3.0 官方 starter 诞生了,其它的都可以扔了~

点击上方好好学java,选择星标公众号 重磅资讯,干货,第一时间送达 今日推荐:推荐 19 个 github 超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 作者...

好好学java 1056

置顶必读(1) | 2026最新首发,全网最全 Spring Boot 学习宝典(附思维导图)

从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。

**My Coding Family** 16万+

Spring Boot构建课程教学平台:从认证授权到文件上传的完整后端实践

在Java企业级应用开发中,Spring Boot框架因其快速构建和简化配置的特性,已成为构建Web应用后端服务的首选技术栈。其核心原理在于通过自动配置和起步依赖,将Spring MVC、Spring Data JPA、Spring Security等组件无缝集成,极大地提升了开发效率。这一技术组合的价值在于能够快速搭建出结构清晰、易于维护的RESTful API服务,广泛应用于各类管理系统、电商平台及在线教育系统等场景。本文以课程辅助教学平台为例,深入剖析如何运用Spring Boot技术栈实现用户认证授

weixin_30887919的博客 508

惊:Swagger3.0 官方 starter 发布了

对于一个搞java开发的人来说,swagger 就不多介绍了,突然发现swagger 3.0 starter 发布了,对于开发人员来说,依赖更加简单方便,不会再存在不同插件之间兼容问题,赶紧来试一下: 此版本的亮点: Spring5,Webflux支持(仅支持请求映射,尚不支持功能端点)。 Spring Integration支持(非常感谢反馈)。 SpringBoot支持springfox Boot starter依赖性(零配置、自动配置支持)。 具有自动完成功能的.

dayuyu_123的博客 687

Spring Boot网上图书商城毕业设计全流程:从技术选型到答辩

在Web开发学习中,Spring Boot作为主流的后端框架,凭借自动配置和快速开发能力,已成为企业级应用与高校项目的首选技术栈。MyBatis Plus进一步简化了数据持久层操作,配合MySQL数据库,能够高效构建业务闭环完整的电商系统。本文从图书商城这一经典项目切入,系统梳理了从技术选型、数据库设计、核心业务实现到论文撰写与答辩准备的完整链路。内容涵盖用户、图书、购物车、订单等核心模块的实战方案,并针对库存并发、状态流转、登录鉴权等高频技术难点给出可落地的解决方案。无论你是准备毕业设计还是希望快速上手全

weixin_34221073的博客 305

Spring Boot核心原理与实战:从自动配置到微服务开发

在Java企业级开发领域,Spring Boot通过其独特的“约定优于配置”理念,极大地简化了应用开发流程。其核心原理在于自动配置机制,能够根据项目依赖自动装配组件,减少了繁琐的XML配置。这一设计显著提升了开发效率,降低了入门门槛,使得开发者能够快速构建可独立运行的应用程序。Spring Boot的技术价值在于其开箱即用的特性,通过起步依赖管理,确保了依赖版本的兼容性,同时内置嵌入式容器,简化了部署流程。这些特性使其成为微服务架构和云原生应用开发的理想选择。在实际应用中,Spring Boot广泛应用于W

weixin_33694172的博客 344

基于Spring Boot的智能学习平台:从推荐算法到部署实战全解析

在在线教育领域,传统学习平台往往停留在课程列表与视频播放层面,缺乏个性化学习体验。如何构建一个真正“懂用户”的智能学习平台?核心在于通过用户行为数据的采集与分析,结合推荐算法动态调整学习路径,实现因材施教。Spring Boot作为Java生态中主流的微服务开发框架,凭借其自动配置、生态丰富等特性,成为此类系统的理想选择。从Spring Security认证授权到Redis缓存策略,再到学习路径推荐规则引擎,工程实践中不仅需要掌握基础CRUD,更需关注API Key安全对接、版本兼容等高频痛点。本文从数据库

weixin_30835649的博客 595

ESP32 CAM安装配置 第四部份:通过使用ESPHome的方式ESP32 Cam加到HomeAssistant

这些包括 aec_value, aec2, ae_level, agc_gain, gain_ctrl, bpc, wpc, raw_gma, lenc, hmirror, dcw, colorbar 等。这些参数的可能值和具体效果会根据你的摄像头硬件和 ESPHome 的版本有所不同。在 ESPHome 中配置 ESP32 Cam 时,每个参数的可能值取决于具体的功能和支持范围。值的范围是 0 到 63,其中 0 是最差质量,63 是最佳质量。horizontal: 水平校正的强度,通常是一个数字值。

weixin_42895252的博客 3364

Spring Boot项目从Fastjson1升级到Fastjson2实战指南

JSON序列化与反序列化是Java后端开发中处理网络通信和数据交换的基础技术,其核心原理是将内存中的对象结构转换为可传输或存储的字符串格式,反之亦然。这项技术的价值在于实现跨平台、跨语言的数据交互,是构建现代分布式系统和微服务架构的基石。在Java生态中,Fastjson因其高性能和易用性曾被广泛采用,但其1.x版本因AutoType机制引发的安全漏洞问题频发,例如1.2.84等版本虽经修复,但安全风险依然存在。因此,将项目升级至经过彻底重构、默认关闭AutoType且性能更优的Fastjson2,对于提升

weixin_30596735的博客 496

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

【温故而知新】Java Spring Boot回顾(十二)

1、什么是 Spring Boot? 多年来, 随着新功能的增加 ,spring 变得越来越复杂。 只需访问https://spring.io/projects 页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。 如果必须启动一个新的 Spring 项目 ,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加 spring 配置。 因此,开始一个新的 spring 项目需要很多努力 ,因为我们现在必须从头开始做所有事情。 Spring Bo...

557

RU.EXE实用指南:从基础操作到高级调试技巧

本文是RU.EXE(RW Everything)的实用指南,详细介绍了这款硬件调试工具从基础操作到高级技巧的全过程。文章阐述了RU.EXE作为直接读写硬件寄存器、内存和PCI配置空间的强大工具,如何帮助硬件工程师和开发人员高效进行底层系统调试与故障排查,并强调了安全操作的重要性。

weixin_29228203的博客 278

【寄存器模型】二、前门访问与后门访问

1.后门访问可以更好的完成前门访问能够完成的事情:后门访问不消耗仿真时间,且消耗的运行时间也远小于前门访问的运行时间。 2.后门访问可以完成前门访问不能完成的事:对于某些特定的场景,如网络通信系统中的一些只读计数器,当要验证计数器进位归零的场景时,前门访问无法完成写寄存器操作,只能通过消耗仿真时间来使计数器到达特定的计数值。而后门访问可以直接对只读寄存器赋一个初值......

carrotbanana的博客 9657

Spring Boot缓存失效时间配置实战:从全局到细粒度TTL控制

缓存是提升系统性能、降低数据库压力的核心技术,其核心原理是将高频访问的数据暂存于高速存储中。Spring Cache作为Java生态中广泛使用的缓存抽象层,通过声明式注解简化了开发。然而,缓存失效时间(TTL)的配置直接决定了数据的实时性与系统资源的有效利用,是缓存方案成败的关键。在实际工程实践中,需要根据业务场景灵活设置TTL,例如用户会话信息可能只需30分钟,而商品详情可缓存1小时。本文深入探讨了在Spring Boot项目中,如何超越基础用法,实现从全局统一配置到为不同缓存数据(如**商品分类**、*

cnracht8153的博客 441

【WRFDA教程】客观分析(OBSGRID)详解

客观分析(OBSGRID)详解

WW、forever的博客 1133

Spring Boot 3 实战指南:构建高性能、可扩展 RESTful API 的完整最佳实践

使用统一处理异常,返回结构化的错误信息。// 自定义业务异常// 更多异常处理...通过本文的详细探讨,我们系统性地回顾了使用 Spring Boot 3 构建现代化、高性能 RESTful API 的全流程核心要点与最佳实践。从项目初始化、分层架构设计,到性能优化、安全加固与自动化部署,每一步都旨在为开发者提供一套可落地、可扩展的工程化解决方案。

2601_95602870的博客 192

安装Openclaw[本地自动化AI助手]至windows【WSL2模式】系统 Openclaw for Windows

摘要:OpenClaw最佳兼容OpenAI系列模型,推荐使用ChatGPT API(需Auth鉴权),避免K*mi等模型导致的信用卡风险。Windows系统需满足WSL2支持条件(Win11或Win10 1903+版本)。安装需导入自签名根证书或跳过浏览器安全警告,通过离线包部署WSL发行版。使用时通过clawtoken命令获取网关认证令牌,并在浏览器完成设备配对。提供代购ChatGPT Plus账号服务(¥140/月),详细操作指南需加微信群获取文件。(150字)

qq_27246521的博客 456

AI学习指南RAG篇(19)-API调用与集成

通过上述API调用示例,您可以方便地将RAGFlow与其他系统集成,实现数据集管理、文档处理、会话管理等功能。希望本文的介绍能帮助您更好地理解和使用RAGFlow的API。

俞兆鹏的博客 2546

springboot

Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson。Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。****Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;2、通过IOC,依赖注入(DI)和面向接口实现松耦合;3、基于切面(AOP)和惯例进行声明式编程;

downsum的博客 1433

【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇1(附项目源码)

生存和射击游戏一直是我的最爱,说起3D最普遍的应该就是射击系统了,你可以在任何情况下加入射击功能,所以我写下了这篇FPS开发记录。希望对你有帮助。在这个项目中,你将学习如何设计和实现射击系统、武器系统、玩家控制、场景设计等方面的内容。通过这个项目,你将深入了解游戏开发中的许多核心概念和技术,并且在实践中不断提升自己。本项目将带你从零开始逐步实现一个完整的第一人称射击游戏,并且会逐步引入一些高级功能,如特效、声音等。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 5500
上一篇: 看完这波3-5年Java程序员常问的高并发/缓存/高可用问题,甚是感叹
下一篇: Github上都在疯找的阿里内部“全栈技能修炼”终于来了!
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值