专栏首页JAVA后端开发swagger设置全局token,解决接口需要token验证的问题

swagger设置全局token,解决接口需要token验证的问题

swagger是一个很牛B的东东,但正常使用时,我们的接口需要登陆才能访问的。即登陆时,要传一个登陆后的token才能访问的。 那这个怎么设置,才可以让所有接口都允许登陆后访问呢。 解决办法如下:

@Configuration
@EnableWebMvc
@EnableSwagger2
public class SwaggerConfig   {
  
    @Bean
    public Docket platformApi() {

        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).forCodeGeneration(true)
                .select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .apis(RequestHandlerSelectors.any())
                .paths(regex("^.*(?<!error)$"))
                .build()
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts());


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

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

    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("Authorization", authorizationScopes));
        return securityReferences;
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("starmark-API").description("©2018 Copyright. Powered By starmark.")
                // .termsOfServiceUrl("")
                .contact(new Contact("Starmark", "", "947618@163.com")).license("Apache License Version 2.0")
                .licenseUrl("https://github.com/springfox/springfox/blob/master/LICENSE").version("2.0").build();
    }

}

关键是在securitySchemes()方法配置里增加需要token的配置。 配置完成后,swagger-ui.html里右上角会有一个Authorize的按钮,录入该token即能成功调用相关接口

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解决logback无法生成第二天日志的问题

    查项目时,发现项目启动时,有生成log日志,但到达第二天时,没有生成新的日志文件。 原来的logback配置如下:

    星痕
  • PathMatchingResourcePatternResolver通过适配符寻找符合条件的java类

    项目中,有时需要通过特定的字符寻找特定的类,如mybatis,可以通过适配符寻找要扫描的目录。 我们自己也可以通过适配符寻找到自己想要的类,具体代码如下:

    星痕
  • 通用数据级别权限的框架设计与实现(4)-单条记录的权限控制

    查看上篇文章通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤,我们开始在原来的基础上实现单条权记录的权限控制。 相信前面的列表权限控制,很多系统都可...

    星痕
  • Flutter跨平台移动端开发丨顶部导航栏 TabBar Widget

    支持左右滑动切换、不限 item 数量的 tabbar 是分类信息列表展示必不可少的组件,在 flutter 中可通过 AppBar + TabBar + P...

    码脑
  • 分布式锁是怎么回事

    之前做微信钱包的项目,许多功能都需要与腾讯微信的前台(App)或后台交互,微信需要一个access_token凭证用于身份验证。

    普通程序员
  • Unix/Linux操作系统中如何在sqlplus/rman中使用方向键

    默认情况下在Unix/Linux中使用Oracle的sqlplus/rman是无法使用↑↓←→几个方向键进行操作的,要想达到Windows下使用sqlplus/...

    用户1221057
  • 【leetcode刷题】20T40-组合

    https://leetcode-cn.com/problems/combinations/

    木又AI帮
  • 手把手教你完成App支付JAVA微信支付

    这篇内容看标题已经很明确了,由于微信是用xml通讯的,所以这一点比较恶心,各位可能需要在项目里导入一些解析xml的包。 首先放出工具类(包含支付宝用到的工具类)...

    Java编程指南
  • 平面检测-搜索真实世界的表面

    现在我们已经完成了正确运行ARKit项目的所有基本设置,我们希望我们的设备能够坐在水平表面上。这是飞机检测。在本节中,我们将学习如何激活平面检测。我们将熟悉锚点...

    iOSDevLog
  • vim之快捷键

    参考文章: (ubuntu)终端复制到系统粘贴板和从系统粘贴板粘到vim的快捷键

    李小白是一只喵

扫码关注云+社区

领取腾讯云代金券