浅析如何使用Swagger生成带权限控制的API文档

2025-02-15 05:50

本文主要是介绍浅析如何使用Swagger生成带权限控制的API文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有...

在咱们的开发工作里,API 文档就像是项目的说明书,清晰准确的文档能让我们的开发效率大幅提升。而当涉及到权限控制时,如何生成既安全又详细javascript的 API 文档就成了一个关键问题。今天,我就和大家好好唠唠如何用 Swagger 来生成带有权限控制的 API 文档。

准备工作

咱们做开发,就像行军打仗,工具和资源就是我们的“粮草”。在使用 Swagger 生成带权限控制的 API 文档之前,得先把相关的依赖添加到项目里。如果你用的是 Maven 项目,在 pom.XML 里加上下面这些依赖:

<dependencies>
    <!-- Swagger API 注解 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!-- Swagger UI -->
  MMaEye  <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

这些依赖就像是我们的武器装备,有了它们,我们才能在开发的战场上“披荆斩棘”。

配置 Swagger

有了依赖,接下来就要对 Swagger 进行配置,让它能按照我们的需求生成 API 文档。创建一个 Swagger 配置类,就像给一场演出搭建舞台一样:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.DoChina编程cket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
               .select()
               .apis(RequestHandlerSelectors.basePackage("com.example.controller"))
               .paths(PathSelectors.any(http://www.chinasem.cn))
               .build();
    }
}

这里我们指定了要扫描的控制器包路径,这样 Swagger 就能知道从哪里获取 API 的信息了。

权限控制

在实际的项目中,API 文档往往包含了很多敏感信息,所以给文档加上权限控制是非常必要的。我们用 Spring Security 来实现这个功能,创建一个 Spring Security 配置类:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.phpcore.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
 
@Configuration
@EnableWebSecurity
public class SecurityConfig {
 
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
               .authorizeRequests()
               .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/v2/api-docs").hasRole("ADMIN")
               .anyRequest().authenticated()
               .and()
               .httpBasic();
        return http.build();
    }
 
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user =
             User.withDefaultPasswordEncoder()
               .username("admin")
               .password("password")
               .roles("ADMIN")
               .build();
 
        return new InMemoryUserDetailsManager(user);
    }
}

在这个配置里,我们规定只有拥有 ADMIN 角色的用户才能访问 Swagger UI 和 API 文档相关的路径,就像给文档加上了一把安全锁,只有有钥匙的人才能打开。

给 API 加上权限注解

在控制器的方法上,我们要添加权限注解和 Swagger 注解,这样在生成的文档里就能清楚地看到每个 API 的权限要求了:

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.Access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/api")
@Api(value = "示例 API", description = "这是一个带有权限控制的示例 API 文档")
public class ExampleController {
 
    @GetMapping("/hello")
    @ApiOperation(value = "获取问候语", notes = "需要 ADMIN 角色才能访问")
    @PreAuthorize("hasRole('ADMIN')")
    public String hello() {
        return "Hello, World!";
    }
}

这里用 @PreAuthorize 注解对方法进行权限控制,同时在 @ApiOperation 注解的 notes 属性中说明权限要求,就像给每个 API 贴上了一个“使用说明”。

查看文档

当我们完成了以上所有步骤,就可以启动 Spring Boot 应用程序,然后访问 http://localhost:8080/swagger-ui.html(端口号根据实际情况修改)。这时浏览器会弹出 HTTP Basic 认证对话框,输入我们在 SecurityConfig 中配置的用户名和密码(这里是 admin 和 password),认证通过后就能看到带有权限信息的 API 文档了,就像打开了一扇通往知识宝库的大门。

注意事项

在实际项目中,我们要注意一些细节。比如,示例中使用的 withDefaultPasswordEncoder() 并不是很安全,建议使用 BCryptPasswordEncoder 等更安全的密码存储方式。另外,我们可以根据实际业务需求调整权限规则和认证方式,像使用 OAuth2 等。

到此这篇关于浅析如何使用Swagger生成带权限控制的API文档的文章就介绍到这了,更多相关Swagger生成API文档内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于浅析如何使用Swagger生成带权限控制的API文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153449

相关文章

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用