Spring Boot Admin 快速入門詳解

1、介紹

官網地址

Spring Boot Admin 是開源社區孵化的項目,用於對 Spring Boot 應用的管理和監控。Spring Boot Admin 分為服務端(spring-boot-admin-server)和客戶端(spring-boot-admin-client),服務端和客戶端之間采用 http 通訊方式實現數據交互;單體項目中需要整合 spring-boot-admin-client 才能讓應用被監控。在 SpringCloud 項目中,spring-boot-admin-server 是直接從註冊中心抓取應用信息,不需要每個微服務應用整合 spring-boot-admin-client 就可以實現應用的管理和監控。

2、服務端搭建

2.1 引入依賴

註意:版本要和 Spring Boot 版本對應,例如我的 Spring Boot 2.3.7.RELEASE,那麼 Spring Boot Admin 對應的版本就是 2.3.x。

<!-- Spring Boot Admin 服務端依賴 -->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.3.1</version>
</dependency>

2.2 添加註解

給啟動類添加一個註解:@EnableAdminServer

@EnableAdminServer
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ServerApplication {
     public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args);
    }
}

2.3 進行測試

訪問項目的端口號即可!

例如我配置的端口號是 9000,那麼直接訪問 http://localhost:9000/ 即可!

2.4 測試結果

在這裡插入圖片描述

3、客戶端搭建

3.1 引入依賴

註意:版本要和 Spring Boot 版本對應,例如我的 Spring Boot 2.3.7.RELEASE,那麼 Spring Boot Admin 對應的版本就是 2.3.x。

<!-- Spring Boot Admin 客戶端依賴 -->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.3.1</version>
</dependency>

3.2 編寫配置

編寫 application.yml 文件:

spring:
  application:
    name: Client
  boot:
    admin:
      client:
        # 配置 Admin Server(服務端的名字)
        url: http://localhost:9000
server:
  port: 9001
 # 開放端點用於 SpringBoot Admin 的監控
management:
  endpoints:
    web:
      exposure:
        include: '*'
logging:
  file:
    # 配置生成日志文件名稱
    name: admin-client.log

3.3 進行測試

啟動項目,然後訪問服務端的 Web 管理界面:

在這裡插入圖片描述

在這裡插入圖片描述

4、安全性

這個 Spring Boot Admin 的管理後臺不用賬號密碼就能直接訪問,一點都不安全,因此要給它加上登錄的功能。

參考 Spring Boot Admin 的官方文檔,我們可以在 Admin-Server 端添加 Spring Security 相關依賴及就可以實現需要登錄後才能訪問網頁管理面板。

官網文檔地址

4.1 添加依賴

在服務端添加 Spring Security 依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

4.2 編寫配置

編寫 application.yml 文件,編寫用戶名密碼:

server:
  port: 9000
spring:
  application:
    name: Server
  security:
    user:
      name: admin
      password: admin

4.3 編寫配置類

編寫 Spring Security 的配置類:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private final String adminContextPath;
     public SecurityConfig(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }
     @Override
    protected void configure(HttpSecurity http) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new 		SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");
        http.authorizeRequests()
                // 1. 配置所有靜態資源和登錄頁可以公開訪問(匿名訪問)
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll()
                .anyRequest().authenticated()
                .and()
                // 2. 配置登錄和登出路徑
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                .logout().logoutUrl(adminContextPath + "/logout").and()
                // 3. 開啟 http basic 支持,客戶端註冊時需要使用
                .httpBasic().and()
                .csrf()
                // 4. 開啟基於 Cookie 的 CSRF 保護
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                // 5. 忽略這些路徑的 CSRF 保護以便客戶端註冊
                .ignoringAntMatchers(
                        adminContextPath + "/instances",
                        adminContextPath + "/actuator/**"
                );
    }
}

4.4 修改客戶端配置

修改客戶端的 application.yml 配置文件,添加用戶名密碼:

這裡不添加用戶名和密碼的話,是連不上服務端的:

spring:
  application:
    name: Client
  boot:
    admin:
      client:
        # 配置 Admin Server(服務端的名字)
        url: http://localhost:9000
        # 配置用戶名
        username: admin
        # 配置密碼
        password: admin

4.5 進行測試

重啟客戶端和服務端項目

訪問效果為:

在這裡插入圖片描述

在這裡插入圖片描述

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: