在升级我的Java API以便它使用Swagger 3之后,当通过UI测试Bearer令牌端点时,它们一直返回401。但是当我通过Postman测试这些端点时,它们返回OK。
SwaggerConfig.java软件包
/**
* Configuration settings for Swagger
*/
@Configuration
public class SwaggerConfig {
@Autowired
BuildProperties buildProperties;
@Value("${swagger-docs.host}")
String host;
@Value("${swagger-docs.protocols}")
String protocols;
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(
new ApiInfoBuilder()
.title(buildProperties.getName())
.version(buildProperties.getVersion())
.build())
.host(host)
.protocols(new HashSet<>(Arrays.asList(protocols.split(","))))
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.basePackage("com.demo.example"))
.paths(PathSelectors.any())
.build()
.tags(new Tag("API", "API Demo Example"));
}
}
应用程序.yml
swagger-docs:
host: ${EXPOSED_HOST:localhost:8088} # public hostname
protocols: https,http
path: /swagger
我需要在代码中添加什么才能使Swagger返回OK?
仅供参考,响应为:
Code- 401 (Undocumented)
Details- Error: Response headers
---
connection: keep-alive
content-length: 0
date: Tue23 Nov 2021 14:48:28 GMT
keep-alive: timeout=60
vary: OriginAccess-Control-Request-MethodAccess-Control-Request-Headers
2011年11月24日编辑
我注意到传递到端点的令牌根据我使用的是Postman还是Swagger而有所不同:
- Postman :"[控制器] jwtToken:持票人xxx..."
- [控制器] jwtToken:xxx..."*
当使用Swagger时,单词“Bearer”不包括在令牌中,因此,它无法读取它。
1条答案
按热度按时间sg3maiej1#
我的解决方案没有考虑“持有人”不在令牌开头的情况。
在尝试解密令牌之前,它正在删除令牌的第一段(无论“承载者”是否存在),从而导致错误。