Swagger UI 无法在具有 Spring 安全性和 JWT 授权的 Spring-Boot 3 上运行

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

我正在尝试将 Swagger-UI 附加到我的项目中,但由于某种原因我无法访问其界面。

我遵循了官方指南+互联网上的一些其他指南。

当我尝试使用 GET 输入指南中提到的路径时,出现错误 403。

这就是我到目前为止所做的:

  1. 我已将以下几行添加到
    pom.xml
    中:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>3.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.1.0</version>
        </dependency>
  1. 我已将它们添加到我的
    SecurityConfigurer
    课程中:
    private static final String[] AUTH_WHITE_LIST = {
            "/v3/api-docs/**",
            "/swagger-ui/**",
            "/v2/api-docs/**",
            "/swagger-resources/**"
    };
    
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .csrf(csrf -> csrf.disable())
                .authorizeHttpRequests((requests) -> requests
                        .requestMatchers(AUTH_WHITE_LIST).permitAll()
                        .requestMatchers("/auth/**").permitAll()
                        .requestMatchers("/users/createUser").permitAll()//todo fix in the future
                        .requestMatchers("/users/getProfile").permitAll()//todo fix in the future
                        .requestMatchers("/users/**").hasRole("ADMIN")
                        .requestMatchers("/contacts/**").hasRole("ADMIN")
                        .anyRequest().authenticated()
                );

        http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);

        return http.build();
    }

这些是我的 spring 依赖项:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>3.1.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
            <version>3.1.1</version>
        </dependency>

java spring spring-boot swagger-ui springdoc
1个回答
0
投票

您可以尝试将springdoc升级到2.2.0版本(

org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0
)。

我认为你有 spring-boot 3.1 和 springdoc 2.1 的兼容性问题。根据 springdoc 发行说明,他们在 2.2.0 版本中将 spring boot 升级到 3.1 版本(https://github.com/springdoc/springdoc-openapi/releases/tag/v2.2.0)。

您还可以从安全检查中排除

/error
端点 (
.requestMatchers("/error").permitAll()
)。我认为 Spring 正在尝试重定向到此页面(由于 404 错误),但如果没有身份验证,它无法显示错误。

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