SpringBoot项目实战-给swagger配置全局认证

564 阅读1分钟

上一节有解析使用swagger2生成在线文档的配置文章,但还不够完善,因为我们还需要模拟真实系统登录后携带token访问系统的配置,贴一下这些配置:

@Bean
    public Docket createRestApi(){//规定扫描那些包下面的接口生成swagger文档
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.hhk.server.controller"))
                .paths(PathSelectors.any())
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .build()
//                给swagger添加全局配置(**下面两方法是本节添加的方法**)
                .securityContexts(securityContexts())
                .securitySchemes(securitySchemes());
    }

然后我们需要实现一下securityContext和securitySchemes方法,先贴securityContexts:

 private List<SecurityContext> securityContexts(){
//        设置需要登录认证的路径
        List<SecurityContext> result=new ArrayList<>();
        result.add(getContextByPath("/hello/.*"));
        return result;
    }

securitySchemes:

private List<ApiKey> securitySchemes(){
//         设置请求头信息
        List<ApiKey> result=new ArrayList<>();
        ApiKey apiKey=new ApiKey("Authorization","Authorization","Header");
        result.add(apiKey);
        return result;
    }

上面的方法还引申出下面的方法:

private SecurityContext getContextByPath(String pathRegex) {
    return SecurityContext.builder()
            .securityReferences(defaultAuth())
            .forPaths(PathSelectors.regex(pathRegex))
            .build();
}

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

给文档配置全局认证token参考如上!!!