使用Swagger时,JWT标记中缺少“承载者”

eqqqjvef  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(147)

在升级我的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”不包括在令牌中,因此,它无法读取它。

sg3maiej

sg3maiej1#

我的解决方案没有考虑“持有人”不在令牌开头的情况。
在尝试解密令牌之前,它正在删除令牌的第一段(无论“承载者”是否存在),从而导致错误。

相关问题