Swagger关于令牌校验

Swagger关于令牌校验

一、需求

微服务oauth2校验令牌,通过Swagger2的securitySchemes配置全局token参数,也可以创建一个默认测试用户默认启动时候登陆获取永久期限的令牌。

二、swagger配置实现

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    /**
     * 创建一个Docket对象
     * 调用select()方法,
     * 生成ApiSelectorBuilder对象实例,该对象负责定义外漏的API入口
     * 通过使用RequestHandlerSelectors和PathSelectors来提供Predicate,在此我们使用any()方法,将所有API都通过Swagger进行文档管理
     *
     * @return
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xxx"))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
                .globalOperationParameters(globalOperationParameters());
    }

    private List globalOperationParameters(){
        //添加默认head参数Authorization
        ParameterBuilder tokenPar = new ParameterBuilder();
        List pars = new ArrayList();
        tokenPar.name("Authorization").defaultValue("Bearer ").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        pars.add(tokenPar.build());
        return pars;
    }

    private List securitySchemes() {
        List apiKeyList = new ArrayList();
        apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
        return apiKeyList;
    }

    private List securityContexts() {
        List securityContexts = new ArrayList<>();
//通过PathSelectors.regex("^(?!auth).*$"),排除包含"auth"的接口不需要使用securitySchemes
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
                        .build());
        return securityContexts;
    }

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

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //标题
                .title("gold-mall-biz使用Swagger2构建RESTful APIs")
                //简介
                .description("")
                //服务条款
                .termsOfServiceUrl("")
                //作者个人信息
                .contact(new Contact("xxx", "", "[email protected]"))
                //版本
                .version("1.0")
                .build();
    }
}
设置完成后进入SwaggerUI,右上角出现“Authorization”按钮,输入令牌对于除上文所述的包含auth的接口结果都会带上token。
Swagger关于令牌校验_第1张图片

你可能感兴趣的:(swagger,spring)