我有一个 java springboot maven 项目,我想要某种自动客户端代码生成器来创建我的客户端代码。我首先必须使用 openAPI/swagger 来记录我的 api,生成此信息的 json,然后生成客户端代码。问题是我使用 jjwt 0.12.3 版本实现了 jwt,每次我尝试访问任何 swagger 端点(例如:
http://localhost:9090/auto-pass/v3/api-docs
)时,都会抛出 403 状态代码,我完全不知道为什么(顺便说一句,我的上下文路径是auto-pass
)
我首先尝试了每种不同的 swagger 和 openAPI 依赖项并解决了这些问题
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.3.0</version>
</dependency>
然后我尝试调整我的安全配置一大堆,以尝试忽略我正在访问的端点
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.cors(AbstractHttpConfigurer::disable)
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(authorize -> authorize
.requestMatchers(HttpMethod.POST, "/api/signup", "/api/login").permitAll()
.requestMatchers("/auto-pass/v3/api-docs", "/auto-pass/v2/api-docs", "/auto-pass/swagger-resources/**", "/auto-pass/**", "/auto-pass/swagger-ui.html", "/auto-pass/v3/api-docs/**", "/auto-pass/api-docs/**", "/auto-pass/api-docs", "/auto-pass/index.html", "/swagger-ui.html", "/v2/api-docs", "/webjars/**").permitAll()
.anyRequest().authenticated()
)
.authenticationProvider(authenticationProvider())
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
return http.build();
}
我想也许只是添加一堆我发现整个堆栈溢出的端点就可以工作,但没有任何东西能解决我的问题。
我也考虑过可能需要一个 swagger 配置类,但 openAPI 上的大多数在线文档都指出,除了放置 mvn 依赖项之外的任何内容都是可选的,并且仍应显示 swaggerUI html 页面。
另外,我之前也弄乱了 openAPI codegen 插件,收到了这个警告,不确定它是否与 swagger UI html 页面生成有关,但我认为它会有用:
2024-01-01T16:02:58.778-05:00 WARN 37572 --- [ main] o.s.b.a.m.MustacheAutoConfiguration : Cannot find template location: classpath:/templates/ (please add some templates, check your Mustache configuration, or set spring.mustache.check-template-location=false)
这是运行maven命令时运行的,
verify -f pom.xml
我现在不知道该去哪里。今天早些时候,
http://localhost:9090/auto-pass/v3/api-docs
这个用于访问文档 JSON 文件的 URL 可以访问,但 SwaggerUI 却无法访问。我也很难找到高质量的文档,因为许多 java 库已被弃用,因为较新的未记录的库(或至少记录较少)。
非常感谢您的帮助,新年快乐:)
尝试使用postman调用API,如果可以的话那就是你的spring security配置的问题而不是swagger的问题。 如果在 postman 上有效,但在 swagger 上无效,则比较两个请求的 CURL,肯定是 swagger 中缺少某些内容。您传递的 jwt 令牌很可能没有正确传递到 API。