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,在具体场景下需要修改对应的参数值来进行使用。


目录
相关文章
|
19天前
|
数据可视化 Java API
Spring Boot与Swagger的集成
Spring Boot与Swagger的集成
|
19天前
|
Java API 开发者
在Spring Boot中集成Swagger API文档
在Spring Boot中集成Swagger API文档
|
9天前
|
运维 DataWorks 监控
DataWorks产品使用合集之集成任务发布后,修改了任务调度的配置但没有生效,是什么导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
11天前
|
SQL Java 数据库
实时计算 Flink版产品使用问题之Spring Boot集成Flink可以通过什么方式实现通过接口启动和关闭Flink程序
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
18天前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
18天前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
|
Java 应用服务中间件
SpringBoot集成使用jsp(超详细)
SpringBoot集成使用jsp(超详细)
SpringBoot集成使用jsp(超详细)
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
|
15天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的武汉市公交路线查询系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的武汉市公交路线查询系统的详细设计和实现(源码+lw+部署文档+讲解等)