Spring Boot Admin 添加报警提醒和登录验证功能的具体实现

下面我来详细讲解Spring Boot Admin添加报警提醒和登录验证功能的具体实现。

1. 添加报警提醒

1.1 准备工作

首先,我们需要准备以下工作:

1.2 添加报警提醒功能

spring-boot-admin-server 项目主类中添加以下配置:

@Bean
public ApplicationListener<InstanceRegisteredEvent> instanceRegisteredEventListener() {
    return event -> {
        String healthEndpointUrl = getHealthEndpointUrl(event.getRegistration());
        // 健康检查失败的阈值
        int healthFailedThreshold = 3;
        event.getApplication().registerHealthIndicator(new HealthIndicator() {
            private AtomicInteger healthFailedTimes = new AtomicInteger(0);

            @Override
            public Health health() {
                Health.Builder builder = new Health.Builder();
                try {
                    RestTemplate restTemplate=new RestTemplate();
                    ResponseEntity<String> responseEntity = restTemplate.getForEntity(healthEndpointUrl,String.class);
                    if(responseEntity.getStatusCode().isError()){
                        builder.down();
                        healthFailedTimes.incrementAndGet();
                    } else {
                        builder.up();
                        healthFailedTimes.set(0);
                    }
                } catch (Exception e) {
                    builder.down();
                    healthFailedTimes.incrementAndGet();
                }
                // 检查健康失败次数,如果大于等于指定阈值,则发送报警邮件
                if(healthFailedTimes.get() >= healthFailedThreshold){
                    sendAlertMail(getApplicationName(event.getRegistration()));
                }
                return builder.build();
            }
        });
    };
}

// 获取健康检查接口URL
private String getHealthEndpointUrl(Registration registration){
    Map<String,String> metadata = registration.getMetadata();
    String host = registration.getHost();
    // 默认健康检查接口:/actuator/health
    String healthEndpoint = metadata.getOrDefault("management.endpoint.health.show-details","")+"/actuator/health";
    return String.format("http://%s:%d/%s", host, registration.getPort(), healthEndpoint);
}

// 发送报警邮件
private void sendAlertMail(String applicationName){
    // TODO 发送邮件
}

该配置在服务实例注册后,会为每个服务实例添加一个健康检查的监控,判断健康检查失败的次数。如果健康检查失败次数大于等于规定的阈值,则会发送一封报警邮件。

1.3 示例说明

以一个示例说明上文的配置。例如我们有两个服务实例,分别是 service-aservice-b,并且规定健康检查失败的阈值是 3 次。

service-a 健康检查失败 3 次后,就会触发报警,发送一封邮件。

2. 添加登录验证

2.1 准备工作

同样,我们需要先安装 Spring Boot Admin Server Extensions 扩展,以支持登录验证功能。

2.2 添加登录验证功能

spring-boot-admin-server 项目主类中添加以下配置:

@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private Environment env;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/**").hasRole("ADMIN")
                .and()
                .formLogin().loginPage("/login.html").defaultSuccessUrl("/").permitAll()
                .and()
                .logout().logoutUrl("/logout").permitAll()
                .and()
                .csrf().disable();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**", "/js/**", "/img/**", "/fonts/**");
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser(env.getProperty("spring.security.user.name", "admin"))
                .password("{noop}" + env.getProperty("spring.security.user.password", "admin"))
                .roles("ADMIN");
    }
}

该配置会对所有的请求进行登录验证,只有角色为 ADMIN 的用户才能访问。此外,还会设置登录页面和登出的 URL,取消 CSRF 防护。

在添加了登录验证的情况下,我们需要添加一个 HTML 页面作为登录入口。在 resources 目录下创建登录页面 login.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>
</head>
<body>
<h1>Login Page</h1>
<form method="post" action="/login">
    <div>
        <label>Username:</label>
        <input type="text" name="username">
    </div>
    <div>
        <label>Password:</label>
        <input type="password" name="password">
    </div>
    <div>
        <button type="submit">Login</button>
    </div>
</form>
</body>
</html>

2.3 示例说明

以一个示例说明上述配置。如果我们想通过 Spring Boot Admin 管理后台,访问 http://localhost:9090,就必须在登录页面中输入用户名和密码。默认的用户名和密码是 admin

在输入正确的用户名和密码后,将会进入到 Spring Boot Admin 管理后台首页。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot Admin 添加报警提醒和登录验证功能的具体实现 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • SpringMVC结构简介及常用注解汇总

    以下是关于“SpringMVC结构简介及常用注解汇总”的完整攻略,其中包含两个示例。 SpringMVC结构简介 SpringMVC是一个基于MVC架构的Web框架,它提供了一种灵活、高效的方式来开发Web应用程序。在SpringMVC中,请求的处理流程可以分为以下几个步: 客户端发送请求到DispatcherServlet。 DispatcherServl…

    Java 2023年5月16日
    00
  • 解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题

    问题描述: 在使用SpringBoot开发Web应用时,如果同时使用了SpringMVC和Apache Commons File-Upload的ServletFileUpload类,就会导致MultipartResolver和ServletFileUpload的冲突问题。具体表现为上传文件时出现异常,上传文件的功能无法正常使用。 原因分析: Multipar…

    Java 2023年6月15日
    00
  • Java异常之图书管理系统

    现在我来给大家分享一下“Java异常之图书管理系统”的完整攻略。 1. 异常概述 异常是Java中用于处理错误和异常情况的一种机制。当程序发生异常时,可以通过异常处理机制将异常抛出并捕获,从而避免程序崩溃或者出现错误。 在Java中,异常是Throwable类及其子类的对象,其中最常见的异常分类包括:Checked Exception(编译时异常)和Unch…

    Java 2023年5月26日
    00
  • Spring Boot 快速集成 Redis的方法

    下面是详细讲解“Spring Boot 快速集成 Redis的方法”的完整攻略。 简介 Redis是目前比较流行的高性能缓存和NoSQL数据库,通过使用它可以提高项目的性能和并发能力。而Spring Boot是目前比较流行的Web框架之一,提供了快速开发、易扩展、自动化配置等特性。下面我们将使用Spring Boot来快速集成Redis。 步骤 第一步:添加…

    Java 2023年5月19日
    00
  • 详解Springboot配置文件的使用

    下面是“详解Springboot配置文件的使用”的完整攻略。 什么是Springboot配置文件? Springboot的配置文件是一个以properties或yml为扩展名的文件,用于配置Springboot应用程序的参数。 在Springboot中,我们可以通过配置文件来轻松地配置应用程序的各种参数,例如:端口号、数据源、日志、邮件等等。 配置文件的使用…

    Java 2023年5月15日
    00
  • springBoot项目常用目录解读

    下面是对“springBoot项目常用目录解读”的详细讲解: 1. 项目结构概述 在理解Spring Boot项目的目录结构之前,需要首先理解Spring Boot的项目结构。Spring Boot的项目结构与标准的Maven或Gradle项目结构类似,区别在于一个主要目录——src/main,这个目录中分别包含了几个子目录,如下: src/main/jav…

    Java 2023年5月19日
    00
  • 如何让Jackson JSON生成的数据包含的中文以unicode方式编码

    要让 Jackson JSON 生成的数据包含的中文以 unicode 方式编码,我们可以借助 Jackson 提供的 ObjectMapper 对象以及 JsonGenerator 对象,具体步骤如下: 创建 ObjectMapper 对象,并配置生成 JSON 格式的选项: ObjectMapper mapper = new ObjectMapper()…

    Java 2023年5月20日
    00
  • Java 认识异常并掌握使用

    Java 认识异常并掌握使用 什么是异常? 在 Java 基础语法中,当程序执行过程中发生错误或异常时,会抛出异常,异常即指程序在运行过程中遇到的错误或意外情况。Java 中的异常是用于处理程序意外情况的一种机制。 异常的分类 Java 中的异常一般分为两类:可检查异常(checked exception)和不可检查异常(unchecked exceptio…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部