swagger设置自定义token

swagger设置自定义token

参考网址:

springboot 集成JWT来实现一下token验证

https://mp.weixin.qq.com/s/z4yqZA6gZ5YuMRu3h5ZAIA

项目仓库地址

https://gitee.com/shao_ming314/springboot-swagger-token

重点说明

该项目实现了 springboot 集成 jwt , 没有使用权限框架 , 基于 springboot 拦截器实现登录认证

swagger 现在又更好的替代方案 knife4j

springboot 整合 knife4j + swagger 步骤

  1. pom.xml 引入依赖
 <!-- springboot 整合 knife4j在线接口文档 -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>
        <!-- 引入 Swagger 依赖 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!-- 引入 Swagger UI 依赖,以实现 API 接口的 UI 界面 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>
  1. 添加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.*;
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.List;

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    
    

    private List<ApiKey> securitySchemes() {
    
    
        List<ApiKey> apiKeys = new ArrayList<>();
        apiKeys.add(new ApiKey("token", "token", "header"));
        return apiKeys;
    }

    private List<SecurityContext> securityContexts() {
    
    
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(SecurityContext.builder().securityReferences(defaultAuth())
                .forPaths(PathSelectors.regex("^(?!auth).*$")).build());
        return securityContexts;
    }

    private List<SecurityReference> defaultAuth() {
    
    
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(new SecurityReference("token", authorizationScopes));
        return securityReferences;
    }

    @Bean(value = "defaultApi")
    public Docket defaultApi() {
    
    
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //开启swagger文档
                .enable(true)
                .groupName("低版本版本")
                .select()
                 // 设置 controller 的路径 
                .apis(RequestHandlerSelectors.basePackage("xxxxx"))
                //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build()
        .securitySchemes(securitySchemes()).securityContexts(securityContexts());
        return docket;
    }
    private ApiInfo apiInfo() {
    
    
        return new ApiInfoBuilder()
                .title("swagger-bootstrap-ui-demo RESTful APIs")
                .description("# swagger-bootstrap-ui-demo RESTful APIs")
                .termsOfServiceUrl("http://www.xx.com/")
                .contact("[email protected]")
                .version("1.0")
                .build();
    }

}


关键代码

  • .apis(RequestHandlerSelectors.basePackage(“xxxxx”))

表示基于 controller 包生成接口文档

  • .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))

表示基于方法上有 ApiOperation 注解生成接口文档

springboot 整合 knife4j 优势

项目中可以同时引入 knife4j 和 swagger , 两种在线文档可以同时使用

如果项目本地启动默认端口是 8080 , 访问地址如下:

swagger 访问地址 : localhost:8080/swagger-ui.html

knife4j 访问地址 : localhost:8080/doc.html

修改请求 token 的名字

关键代码

swagger 配置类 SwaggerConfiguration.class

替换 所有 的名称即可

如果 token 的 键为 x-token

我们只需要替换所有的 token 为 x-token

如果 基于 http 的 Authorization 规范 , 请求头的 token 键就是 Authorization

我们只需要替换所有的 token 为 Authorization

image-20211115142212444

设置token

swagger

设置token 所有接口访问 都可以生效

image-20211115141819033

knife4j

全局设置 token

image-20211115141917429

方法单独设置 token

image-20211115141954543

[外链图片转存中…(img-XaBkq8zI-1636958935945)]

knife4j

全局设置 token

[外链图片转存中…(img-pzEji6jW-1636958935946)]

方法单独设置 token

[外链图片转存中…(img-GOIujtWX-1636958935948)]

(knife4j 比 swagger 强大 , 符合国人用图形化界面的习惯 , 哈哈哈)

Guess you like

Origin blog.csdn.net/shaoming314/article/details/121334666