知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 3 – 配置 Spring Security 以允許 Swagger UI 訪問

Spring Boot,Spring Security
HongKong
10
10:53 AM · Dec 06 ,2025

1. 概述

在本教程中,我們將學習如何配置 Spring Security 以允許在 Spring Boot 3 應用程序中訪問 Swagger UI。

Swagger UI 是一種用於記錄 API 的工具。它提供了一個用户友好的界面,用於與 API 交互和測試端點。但是,當我們啓用 Spring Security 在應用程序中時,由於安全限制,Swagger UI 變得不可訪問。

我們將探索如何在 Spring Boot 3 應用程序中設置 Swagger,並配置 Spring Security 以允許訪問 Swagger UI。

2. 代碼設置

讓我們首先設置我們的應用程序。我們將添加必要的依賴項並創建一個簡單的控制器。我們將配置 Swagger 並驗證 Swagger UI 是否可訪問。然後,我們將通過配置 Spring Security 來修復它。

2.1. 添加 Swagger 和 Spring Security 依賴

首先,我們將必要的依賴項添加到 pom.xml 文件中:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

The 當我們添加此依賴項時,Spring Security 默認啓用並阻止所有 URL 的訪問。

The @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, World!"; } }

當我們調用 hello 端點時,它返回字符串 “Hello, World!”

3. 配置 Swagger

接下來,我們配置 Swagger。我們將設置配置以啓用 Swagger,並向控制器添加註釋。

3.1. 配置類

為了配置 Swagger,我們需要創建一個配置類:

@Configuration
public class SwaggerConfig {
    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
            .group("public")
            .pathsToMatch("/**")
            .build();
    }
}

在這裏,我們創建了一個名為 SwaggerConfig 的類,並定義了一個 publicApi() 方法,該方法返回一個 GroupedOpenApi Bean。這個 Bean 將所有匹配指定路徑模式的端點分組在一起。

我們定義了方法中的一個組 public,並指定了路徑模式為 “/**” 。這意味着應用程序中的所有端點都將被包含在這個組中。

3.2. Swagger 註解

接下來,讓我們為控制器添加 Swagger 註解:

@Operation(summary = "Returns a Hello World message")
@GetMapping("/hello")
public String hello() {
    return "Hello, World!";
} 

我們為 @Operation 註解添加到 @hello 方法中,用於描述該端點。該描述將在 Swagger UI 中顯示。

3.3. 測試

現在,讓我們運行應用程序並測試 Swagger UI。 默認情況下,Swagger UI 可在以下地址訪問:http://localhost:8080/swagger-ui/index.html

 

如上所示,我們發現 Swagger UI 無法訪問。 相反,我們會被提示輸入用户名和密碼。 Spring Security 需要在允許訪問 URL 之前對用户進行身份驗證。

4. 配置 Spring Security 以允許 Swagger UI 訪問

現在,讓我們配置 Spring Security 以允許訪問 Swagger UI。我們將探討兩種實現這一目標的方法:使用 <em >SecurityFilterChain</em><em >WebSecurityCustomizer</em>

4.1. 使用 WebSecurityCustomizer

通過使用 WebSecurityCustomizer 接口,可以輕鬆地排除 Spring Security 上的路徑。我們可以使用此接口在指定的 URL 上禁用 Spring Security。

讓我們在配置類中定義一個類型為 WebSecurityCustomizer 的 Bean:

@Configuration 
public class SecurityConfig {
   @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring()
          .requestMatchers("/swagger-ui/**", "/v3/api-docs*/**");
    }
}

該<em>@Configuration</em>註解標記了該類為一個配置類。接下來,我們定義一個類型為<em>WebSecurityCustomizer</em>的Bean。

這裏,我們使用了一個 lambda 表達式來定義一個<em>WebSecurityCustomizer</em>的實現。<strong>我們使用了<em>ignoring()</em>方法來排除 Swagger UI URL 路徑<em>/swagger-ui/**</em>和<em>/v3/api-docs/**</em>從安全配置中。</strong>

這在我們需要忽略 URL 上的所有安全規則時非常有用。<strong>僅當該 URL 是內部且未公開訪問時才建議使用,因為在這種情況下不會應用任何安全規則。</strong>

4.2. 使用 SecurityFilterChain

另一種覆蓋 Spring Security 默認實現的辦法是定義一個 SecurityFilterChain Bean。 這樣,我們就可以在我們的實現中允許 Swagger URL。

為此,我們可以定義一個 SecurityFilterChain Bean:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(
      authorizeRequests -> authorizeRequests.requestMatchers("/swagger-ui/**")
        .permitAll()
        .requestMatchers("/v3/api-docs*/**")
        .permitAll());

    return http.build();
}

此方法配置安全過濾器鏈,允許訪問 Swagger UI URL:

  • 我們使用了 authorizeHttpRequests() 方法來定義授權規則。
  • requestMatchers() 方法用於匹配 URL。 我們指定了 Swagger UI URL 模式 /swagger-ui/** 和 /v3/api-docs*/**。
  • /swagger-ui/** 是 Swagger UI 的 URL 模式,而 /v3/api-docs*/** 是 Swagger 調用以獲取 API 信息對應的 URL 模式。
  • 我們使用了 permitAll() 方法來允許訪問這些 URL 且無需身份驗證。
  • 最後,我們使用了 http.build() 方法來構建安全過濾器鏈。

這是允許對某些 URL 模式進行未身份驗證請求的推薦方法。 這些 URL 將包含 Spring Security 響應頭,但不需要用户身份驗證。

4.3. 測試

現在,讓我們運行應用程序並再次測試 Swagger UI。 Swagger UI 現在應該可以訪問。

如圖所示,頁面已可訪問,幷包含有關我們的控制器端點的信息。

5. 結論

在本文中,我們學習瞭如何配置 Spring Security 以允許在 Spring Boot 3 應用程序中訪問 Swagger UI。我們探討了如何使用 SecurityFilterChain 接口和 WebSecurityCustomizer 接口從 Spring Security 配置中排除 Swagger UI URL。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.