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

2021-04-26 11:30:45 +08:00
 JasonLaw

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

906 次点击
所在节点    程序员
5 条回复
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
2021-04-26 11:44:22 +08:00
@qinxi #1 这个就是全局的 header .如果你要默认值就把 defaultValue 加上就可以了
JasonLaw
2021-04-26 11:50:21 +08:00
@qinxi #1 globalOperationParameters 只能在代码写死默认值吗?不可以在页面上设置默认值吗?
qinxi
2021-04-26 11:54:15 +08:00
@JasonLaw #3 不知道普通的 header 可以不可以, 不过 auth 类 header 是可以的. 你可以用我说的第一种的 ,设置一次就可以了
JasonLaw
2021-04-26 11:59:38 +08:00
@qinxi #4 好吧,谢谢啦。因为那个 header 跟 OAuth 没有关系,所以不想使用 securitySchemes 那些🤐

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/773303

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX