Integrar spring-boot-admin (1) Construir servidor de administración

1. ¿Qué es la SBA?

El nombre completo de SBA es Spring Boot Admin, que es un proyecto de código abierto para administrar y monitorear aplicaciones Spring Boot. Dividido en dos componentes: admin-server y admin-client, admin-server es un microservicio separado, que recopila datos del punto final del actuador y los muestra en spring-boot-admin-ui, y el cliente es nuestra aplicación spring boot. Se recopilan casi todos los puntos finales conocidos. A través de spring-boot-admin, puede cambiar dinámicamente el nivel de registro, exportar registros, exportar heapdump, monitorear varios indicadores, etc.

Github: https://github.com/codecentric/spring-boot-admin
Documentación oficial: https://codecentric.github.io/spring-boot-admin/2.3.1/

La versión spring-boot-admin utilizada en este artículo es 2.3.1

2. Construya el servidor de administración

2.1 Cree una aplicación Spring Boot con la siguiente estructura

inserte la descripción de la imagen aquí

2.2 Modifique pom.xml e introduzca dependencias relacionadas con spring-boot-admin
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

	<groupId>devops</groupId>
    <version>1.0.0-dev</version>
    <artifactId>cherry-boot-admin</artifactId>

    <properties>
        <spring-boot-admin.version>2.3.1</spring-boot-admin.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-dependencies</artifactId>
                <version>${spring-boot-admin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- spring-boot web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- spring-boot-admin server -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
2.3, modifique la clase de inicio, agregue @EnableAdminServer
package com.cherry.boot.admin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

import de.codecentric.boot.admin.server.config.EnableAdminServer;

@EnableAdminServer
@SpringBootApplication
@ComponentScan("com.cherry.boot")
public class CherryBootAdminApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(CherryBootAdminApplication.class, args);
    }
}
2.4, configurar la seguridad

Configurar nombre de usuario y contraseña en application.yml

# security
spring:
  security:
    user:
      name: admin
      password: 123456

Agregar una clase de configuración de seguridad

package com.cherry.boot.admin.config;

import java.util.UUID;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

import de.codecentric.boot.admin.server.config.AdminServerProperties;

/**
 * spring security配置
 *
 * @author huangqinhua
 * @version 1.0.0
 * @date 2021/11/04 18:16
 */
@Configuration
public class BootAdminSecurityConfig extends WebSecurityConfigurerAdapter {
    
    
    private final AdminServerProperties adminServer;

    public BootAdminSecurityConfig(AdminServerProperties adminServer) {
    
    
        this.adminServer = adminServer;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    
    
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(this.adminServer.path("/"));

        http.authorizeRequests((authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**"))
            .permitAll()
            .antMatchers(this.adminServer.path("/login"))
            .permitAll()
            .anyRequest()
            .authenticated())
            .formLogin((formLogin) -> formLogin.loginPage(this.adminServer.path("/login"))
                .successHandler(successHandler)
                .and())
            .logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout")))
            .httpBasic(Customizer.withDefaults())
            .csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringRequestMatchers(new AntPathRequestMatcher(this.adminServer.path("/instances"), HttpMethod.POST.toString()),
                    new AntPathRequestMatcher(this.adminServer.path("/instances/*"), HttpMethod.DELETE.toString()),
                    new AntPathRequestMatcher(this.adminServer.path("/actuator/**"))))
            .rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID()
                .toString())
                .tokenValiditySeconds(1209600));
    }
}
2.5 Inicie el proyecto, ingrese http://localhost:8000

Interfaz de inicio de sesión
inserte la descripción de la imagen aquí
Interfaz principal
inserte la descripción de la imagen aquí

En este punto, la configuración de nuestro servidor está completa.

Supongo que te gusta

Origin blog.csdn.net/q283614346/article/details/121142649
Recomendado
Clasificación