SpringBoot集成swagger2配置权限认证参数

简介: SpringBoot集成swagger2配置权限认证参数

在使用swagger2时,如果api接口需要token等权限认证内容,那么此时可以有两种方案进行解决:方案一,每个请求上面都添加对应token的key和value值。方案二:全局统一添加权限认证的token。

一般情况下token都存放在header中。

引入swagger2依赖

引入对应的swagger2依赖:











<dependency>    <groupId>io.springfox</groupId>    <artifactId>springfox-swagger2</artifactId>    <version>2.9.2</version></dependency><dependency>    <groupId>io.springfox</groupId>    <artifactId>springfox-swagger-ui</artifactId>    <version>2.9.2</version></dependency>

集成配置方案一

首先我们来看第一种方案,也就是每个请求都添加对应header信息,对应的config文件配置如下:



































































import com.google.common.collect.Lists;import io.swagger.annotations.ApiOperation;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.ParameterBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.schema.ModelRef;import springfox.documentation.service.*;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spi.service.contexts.SecurityContext;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;import java.util.Collections;import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@Configuration@EnableSwagger2public class SwaggerConfig {  @Bean  public Docket createRestApi() {    ParameterBuilder parameterBuilder = new ParameterBuilder();    List<Parameter> parameters = Lists.newArrayList();    parameterBuilder        .name("token")        .description("token令牌")        .modelRef(new ModelRef("String"))        .parameterType("header")        .defaultValue("")        .required(false).build();    parameters.add(parameterBuilder.build());
    return new Docket(DocumentationType.SWAGGER_2)        .apiInfo(apiInfo())        .select()        //加了ApiOperation注解的类,才生成接口文档        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))        //包下的类,才生成接口文档        .apis(RequestHandlerSelectors.basePackage("com.chengdeshi.controller"))        .paths(PathSelectors.any())        .build()        .globalOperationParameters(parameters)        .securitySchemes(security());  }
  private ApiInfo apiInfo() {    return new ApiInfoBuilder()        .title("文档")        .description("文档")        .termsOfServiceUrl("https://www.choupangxia.com")        .version("4.0.0")        .build();  }
  private List<ApiKey> security() {    return newArrayList(        new ApiKey("token", "token", "header")    );  }
}

重点是构建了ParameterBuilder对象,并通过globalOperationParameters将其配置到Docket中。

此时展示效果如下: image.png执行每个接口请求时都需要添加token值,除非写死默认值。

集成配置方案二

如果不想每次都填写这么一个token字段,每次都手动进行填写。那么可以通过统一全局配置。

对应的配置文件配置如下:









































































import io.swagger.annotations.ApiOperation;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.service.ApiKey;import springfox.documentation.service.AuthorizationScope;import springfox.documentation.service.SecurityReference;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spi.service.contexts.SecurityContext;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;import java.util.Collections;import java.util.List;
import static com.google.common.collect.Lists.newArrayList;
@Configuration@EnableSwagger2public class SwaggerConfig {  @Bean  public Docket createRestApi() {    return new Docket(DocumentationType.SWAGGER_2)        .apiInfo(apiInfo())        .select()        //加了ApiOperation注解的类,才生成接口文档        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))        //包下的类,才生成接口文档        .apis(RequestHandlerSelectors.basePackage("com.chengdeshi.controller"))        .paths(PathSelectors.any())        .build()        .securityContexts(securityContexts())        .securitySchemes(security());  }
  private ApiInfo apiInfo() {    return new ApiInfoBuilder()        .title("文档")        .description("文档")        .termsOfServiceUrl("https://www.choupangxia.com")        .version("4.0.0")        .build();  }
  private List<ApiKey> security() {    return newArrayList(        new ApiKey("token", "token", "header")    );  }
  private List<SecurityContext> securityContexts() {    return new ArrayList(        Collections.singleton(SecurityContext.builder()            .securityReferences(defaultAuth())            .forPaths(PathSelectors.regex("^(?!api).*$"))            .build())    );  }
  List<SecurityReference> defaultAuth() {    AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];    authorizationScopes[0] = authorizationScope;    return new ArrayList(        Collections.singleton(new SecurityReference("token", authorizationScopes)));  }
}

此时重点是配置了Docket的securityContexts,通过该配置,设置了一个全局的变量“global”。注意defaultAuth方法中SecurityReference的第一个参数为你使用的token的key,我这里使用token。

此种方案展示效果如下:

在右上角会出现一个Authorize的选项。 image.png在图中value的地方填写对应的token值,点击个Authorize。随后使用任何接口时都会在header部分添加对应token值。

小结

当然上述是以token为例进行讲解的,如果你想通过header传输其他参数,也可以借鉴此方法。在此实例中大家切勿全部copy,在具体场景下需要修改对应的参数值来进行使用。


目录
相关文章
|
SQL Java 关系型数据库
Dataphin功能Tips系列(53)-离线集成任务如何合理配置JVM资源
本文探讨了将MySQL数据同步至Hive时出现OOM问题的解决方案。
591 5
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
793 0
|
JSON Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
本文详细介绍了Swagger2的使用方法,包括在Spring Boot项目中的配置与应用。重点讲解了Swagger2中常用的注解,如实体类上的`@ApiModel`和`@ApiModelProperty`,Controller类上的`@Api`、`@ApiOperation`以及参数上的`@ApiParam`等。通过示例代码展示了如何为实体类和接口添加注解,并在页面上生成在线接口文档,实现接口测试。最后总结了Swagger的优势及其在项目开发中的重要性,提供了课程源代码下载链接供学习参考。
1194 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
|
JSON API 数据处理
Swagger动态参数注解:使用@DynamicParameters实现JSON参数的灵活定义
总结起来,通过使用SpringFox提供给我们工具箱里面非常有力量但又不太显眼工具———即使面对复杂多变、非标准化数据格式也能轻松驾驭它们———从而大大增强我们系统与外界沟通交流能力同时也保证系统内部数据处理逻辑清晰明确易于维护升级.
656 10
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
JSON JavaScript API
MCP 实战:用配置与真实代码玩转 GitHub 集成
MCP 实战:用配置与真实代码玩转 GitHub 集成
3255 4
|
缓存 前端开发 API
(网页系统集成CAD功能)在线CAD中配置属性的使用教程
本文介绍了Mxcad SDK在线预览和编辑CAD图纸的功能及配置方法。通过Vite、CDN或Webpack实现集成,用户可自定义设置以满足项目需求。主要内容包括:1)`createMxCad()`方法的初始属性配置,如画布ID、WASM文件路径、字体加载路径等;2)`MxFun.setIniset()`方法提供的更多CAD初始配置;3)`McObject`对象API用于动态调整视图背景色、浏览模式等。此外,还提供了在线Demo(https://demo2.mxdraw3d.com:3000/mxcad/)供用户测试实时效果。
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
2133 0
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
648 0
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。

热门文章

最新文章