使用jjwt的java springboot项目中的SwaggerUI不断抛出403状态代码

问题描述 投票:0回答:1

我有一个 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 库已被弃用,因为较新的未记录的库(或至少记录较少)。

非常感谢您的帮助,新年快乐:)

spring-boot jwt openapi swagger-ui jjwt
1个回答
0
投票

尝试使用postman调用API,如果可以的话那就是你的spring security配置的问题而不是swagger的问题。 如果在 postman 上有效,但在 swagger 上无效,则比较两个请求的 CURL,肯定是 swagger 中缺少某些内容。您传递的 jwt 令牌很可能没有正确传递到 API。

© www.soinside.com 2019 - 2024. All rights reserved.