我用的是Spring Boot 2.5.4和Swagger 3。我在Swagger配置文件中添加了一个全局请求参数作为类型头,required=true。Swagger UI在所有API中正确地显示了所需的请求头,但问题是它允许在所需请求头的值为空时发送请求。在Swagger 2中,UI曾经禁止发送请求,直到值被填充。
任何建议。
@Bean
public Docket api() {
RequestParameterBuilder aParameterBuilder = new RequestParameterBuilder();
aParameterBuilder.name("x-remote-user").description("Remote User").in(ParameterType.HEADER).required(true)
.build();
List<RequestParameter> aParameters = new ArrayList<>();
aParameters.add(aParameterBuilder.build());
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.securityContexts(Arrays.asList(securityContext())).securitySchemes(Arrays.asList(apiKey())).select()
.apis(RequestHandlerSelectors.basePackage("com.xxx.controller"))
.paths(PathSelectors.ant("/api/**")).build().globalRequestParameters(aParameters);
}
也许对你有帮助
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.operationSelector(this::selector)
.build();
}
boolean selector(OperationContext operationContext) {
String url = operationContext.requestMappingPattern();
// filter url
return true;
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "Authorization header");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Collections.singletonList(new SecurityReference("Authorization", authorizationScopes));
}
private List<SecurityScheme> securitySchemeList(){
ApiKey apiKey = new ApiKey("Authorization", "Authorization token", "header");
return Collections.singletonList(apiKey);
}
private List<RequestParameter> globalRequestParameters() {
RequestParameterBuilder parameterBuilder = new RequestParameterBuilder()
.in(ParameterType.HEADER)
.name("Authorization")
.required(true)
.query(param -> param.model(model -> model.scalarModel(ScalarType.STRING)));
return Collections.singletonList(parameterBuilder.build());
}
@Bean
public Docket authorization() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.securityContexts(Collections.singletonList(securityContext()))
.securitySchemes(securitySchemeList())
.globalRequestParameters(globalRequestParameters())
.select()
.paths(PathSelectors.regex("^(?!/error).*"))
.build()
;
}
我找到了解决方案.如果其他人正在寻找它,请在此处发布.
如果我们不允许空值,那么如果标头值保持为空,则 swagger UI 开始阻止我们执行 API。
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.securityContexts(Arrays.asList(securityContext())).securitySchemes(Arrays.asList(apiKey())).select()
.apis(RequestHandlerSelectors.basePackage("com.xxx.controller"))
.paths(PathSelectors.ant("/api/**")).build()
.globalRequestParameters(Arrays.asList(new RequestParameterBuilder().name("x-remote-user")
.description("Remote User").in(ParameterType.HEADER).required(true)
.query(simpleParameterSpecificationBuilder -> simpleParameterSpecificationBuilder
.allowEmptyValue(false).model(modelSpecificationBuilder -> modelSpecificationBuilder
.scalarModel(ScalarType.STRING)))
.build()));
}
本文向大家介绍vue+axios全局添加请求头和参数操作,包括了vue+axios全局添加请求头和参数操作的使用技巧和注意事项,需要的朋友参考一下 走登录的接口都会返回一个token值,然后存起来方便之后调接口的时候给后台传过去,传给后台的方式有两种:(具体使用哪种需要和后台商量) 1、放在请求头中 2、放在接口的参数中 1、放在请求头中 下面代码是从本地cookie中拿token VueCook
问题内容: 这个问题非常简单和技术性: 我要实现的是: 有没有办法做到这一点?如果不是,可以返回一个值应用于? 问题答案: 您期望的是 同步 ( 阻塞 )类型的请求。 默认情况下 ,请求是 异步的 ( 非阻塞 ),这意味着浏览器不会等待它们完成才能继续工作。这就是为什么您的警报得到错误结果的原因。 现在,您可以选择将请求设置为 sync ,这意味着脚本将仅在请求完成 后 继续运行。 该 建议的 方
基于Web中的示例创建了两个应用程序:Angular中的Frontend和customer)Angular URL:http://localhost:4200/Spring Boot URL:http://localhost:9020/(REST:http://localhost:9020/API/) 根据这里的专家对我前面问题的说明(https://stackoverflow.com/posts
问题内容: 如果我将@Builder添加到类中。创建了builder方法。 我有一个需要特定字段的要求。在这种情况下,名称字段是必填字段,而不是姓氏。理想情况下,我想这样声明。 我不知道该怎么做。我尝试将@Builder添加到构造函数中,但没有成功。 问题答案: 您可以使用Lombok批注配置轻松完成此操作 然后像那样使用 当然这里是可选的。
(我更喜欢)或 只需使用调用,值应存储在该请求的某个位置。 我知道可能更简单,因为它已经击中了正确的,但我更喜欢。 我刚刚意识到,不能像预期的那样工作,因为Spring Security总是首先处理请求。不过我需要一个拦截器在Spring安全启动之前处理它。
问题内容: 是否可以定义每个日志语句中包含的唯一请求ID,而无需将记录器交给每个方法/函数调用? 使用的技术:NodeJS,Express,Winston 问题答案: 已编辑 最后,我创建了一个库,可以完成所有工作。 https://github.com/davicente/express-logger-unique-req- id 它是Winston库的包装,因此您可以以相同的方式使用它。 让我