天天看點

Spring Boot Admin 基于security 認證監控項目結構如下:

首先介紹一下Spring Boot Admin是用來幹嘛的,它用于監控基于 Spring Boot 的應用,它是在 Spring Boot Actuator 的基礎上提供簡潔的可視化 WEB UI。

Spring Boot Admin 提供了很多功能,如顯示 Spring Boot 應用的name、id 和 version,顯示線上狀态,Loggers 的日志級别管理,Threads 線程管理,Environment 管理等。

接下來搭建一個簡單的Demo,包含Admin server與Admin client兩個部分。

因為版本不相容的問題,spring boot 用的是1.5.10,spring cloud 用的Edgware.SR4版本。

項目結構如下:

Spring Boot Admin 基于security 認證監控項目結構如下:

先搭建Admin server:spring-cloud-admin-simple-server:

在pom.xml檔案添加依賴:

<!--security -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--spring boot admin server -->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>1.5.7</version>
</dependency>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui-login</artifactId>
    <version>1.5.7</version>
</dependency>
           

注:如果在依賴項中包含spring-boot-admin-server-ui-login,它将提供可視化登入頁面和登出按鈕。

application.properties配置檔案配置如下:

server.port=8888
#關閉原始的spring security 認證,不關閉的話,浏覽器打開就會跳出認證登入彈出框
security.basic.enabled=false
#spring boot actuator某些端點的通路是需要權限的
management.security.enabled=false
security.user.name=root
#spring boot dafault user.password 在項目啟動時列印在控制台中
security.user.password=root
           

安全認證相關配置 基于安全認證的spring boot admin:SecurityConfig如下:

package com.sinosoft.springcloudadminsimpleserver.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * 安全認證相關配置 基于安全認證的spring boot admin
 *
 * @author 隻吃兩個荞麥饅頭
 */
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //super.configure(http);
        // Page with login form is served as /login.html and does a POST on /login
        http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll();
        // The UI does a POST on /logout on logout
        http.logout().logoutUrl("/logout");
        // The ui currently doesn't support csrf
        http.csrf().disable();

        // Requests for the login page and the static assets are allowed
        //允許登入頁面和靜态資源的請求
        http.authorizeRequests()
                .antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")
                .permitAll();
        // ... and any other request needs to be authorized
        //這點重要:所有請求都需要認證
        http.authorizeRequests().antMatchers("/**").authenticated();

        // Enable so that the clients can authenticate via HTTP basic for registering
        http.httpBasic();

    }
}
           

啟始類中添加标簽@EnableAdminServer

@SpringBootApplication
@EnableAdminServer
public class SpringCloudAdminSimpleServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudAdminSimpleServerApplication.class, args);
    }

}
           

啟動項目:通路http://localhost:8888/login.html

Spring Boot Admin 基于security 認證監控項目結構如下:

注:這裡這個頁面就是前面所說的在依賴項中包含spring-boot-admin-server-ui-login,它将提供可視化登入頁面和登出按鈕。

這裡的使用者名跟密碼是前面配置檔案中所配置的root/root。輸入登入之後就會看到如下頁面,由于沒有Admin client注冊,是以這裡沒有任何監控到的spring boot應用。

Spring Boot Admin 基于security 認證監控項目結構如下:

接下來搭建client端:spring-cloud-admin-simple-client:

pom.xml檔案中添加依賴:

<!--每個要注冊的應用程式都必須包含Spring Boot Admin Client。 -->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
           

application.properties配置檔案配置如下:

server.port=8889
spring.application.name=spring-cloud-admin-simple-client
#要注冊的Spring Boot Admin Server的URL
spring.boot.admin.url=http://localhost:8888
#從Spring Boot 1.5.x開始,預設情況下所有端點都是安全的。 為簡潔起見,我們暫時禁用了安全性。 檢視有關如何處理安全端點的安全性部分。
management.security.enabled=false
spring.boot.admin.client.metadata.user.name=root
spring.boot.admin.client.metadata.user.password=root
#如果保護/api/applications端點,請不要忘記使用spring.boot.admin.username和spring.boot.admin.password在SBA用戶端上配置使用者名和密碼【否則你的client端資訊注冊不到server端上】
spring.boot.admin.username=root
spring.boot.admin.password=root
           

啟始類配置如下:

@SpringBootApplication
public class SpringCloudAdminSimpleClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudAdminSimpleClientApplication.class, args);
    }

}
           

啟動項目:依次先運作項目spring-cloud-admin-simple-server,再運作spring-cloud-admin-simple-client,

通路http://localhost:8888/login.html

使用者名密碼是之前配置的:root/root,輸入登入之後就可以見到如下圖所示頁面:

Spring Boot Admin 基于security 認證監控項目結構如下:

這時頁面有顯示spring-cloud-admin-simple-client被監控着。

如果有不足之處,還希望能夠多多包涵并指正我。