V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
JasonLaw
V2EX  ›  程序员

Springfox 如何设置一个全局的 HTTP request header?

  •  
  •   JasonLaw · 2021-04-26 11:30:45 +08:00 · 993 次点击
    这是一个创建于 1336 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用Docket.globalRequestParameters的话,每个 REST API 都会有这么一个 request header,但是我每次都要设置,有没有可以全局设置的方法?

    5 条回复    2021-04-26 11:59:38 +08:00
    qinxi
        1
    qinxi  
       2021-04-26 11:42:47 +08:00
    如果是 auth 类 header 会有个小锁
    new Docket(DocumentationType.SWAGGER_2)
    .useDefaultResponseMessages(false)
    .apiInfo(apiInfo())
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.xx"))
    .paths(PathSelectors.any())
    .build().securitySchemes(securitySchemes())
    //.globalOperationParameters(globalOperationParameters())
    .securityContexts(securityContexts());

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

    private List<SecurityContext> securityContexts() {
    return Collections.singletonList(
    SecurityContext.builder()
    .securityReferences(defaultAuth())
    .forPaths(PathSelectors.any())
    .build()
    );
    }

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


    //如果是普通的 header
    new Docket(DocumentationType.SWAGGER_2)
    .useDefaultResponseMessages(false)
    .apiInfo(apiInfo())
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.xx"))
    .paths(PathSelectors.any())
    .build()
    //.securitySchemes(securitySchemes())
    .globalOperationParameters(globalOperationParameters())
    ;


    private List<Parameter> globalOperationParameters() {
    ArrayList<Parameter> list = new ArrayList<>();
    Parameter parameter = new ParameterBuilder().name("key").required(true)
    .description("").parameterType("header").defaultValue("")
    .allowMultiple(false)
    .modelRef(new ModelRef("string")).build();
    list.add(parameter);

    return list;
    }
    qinxi
        2
    qinxi  
       2021-04-26 11:44:22 +08:00
    @qinxi #1 这个就是全局的 header .如果你要默认值就把 defaultValue 加上就可以了
    JasonLaw
        3
    JasonLaw  
    OP
       2021-04-26 11:50:21 +08:00
    @qinxi #1 globalOperationParameters 只能在代码写死默认值吗?不可以在页面上设置默认值吗?
    qinxi
        4
    qinxi  
       2021-04-26 11:54:15 +08:00
    @JasonLaw #3 不知道普通的 header 可以不可以, 不过 auth 类 header 是可以的. 你可以用我说的第一种的 ,设置一次就可以了
    JasonLaw
        5
    JasonLaw  
    OP
       2021-04-26 11:59:38 +08:00
    @qinxi #4 好吧,谢谢啦。因为那个 header 跟 OAuth 没有关系,所以不想使用 securitySchemes 那些🤐
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:05 · PVG 10:05 · LAX 18:05 · JFK 21:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.