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整合websocket实现消息推送及触发功能

    SpringMVC整合WebSocket实现消息推送及触发功能 在 SpringMVC 中,我们可以使用 WebSocket 实现消息推送及触发功能。本文将详细讲解 SpringMVC 整合 WebSocket 的实现方法,包括如何配置 SpringMVC、如何使用 WebSocket、如何实现消息推送及触发功能等。 配置 SpringMVC 在使用 Web…

    Java 2023年5月18日
    00
  • centos 安装java环境的多种方法

    CentOS 安装 Java 环境的多种方法 Java 是一种跨平台、面向对象的编程语言,广泛应用于 Web 开发、移动开发和桌面应用开发等领域。但是,在运行 Java 程序之前必须先安装 Java 运行环境(JRE)或 Java 开发工具包(JDK)。本文将介绍 CentOS 安装 Java 环境的多种方法。 方法一:通过 yum 命令安装 CentOS …

    Java 2023年5月24日
    00
  • Java线程阻塞方法sleep()与wait()的全面讲解

    Java线程阻塞方法sleep()与wait()的全面讲解 简介 在Java多线程编程中,线程状态的控制是非常重要的一个部分。线程可以处于多种状态,例如就绪状态,运行状态,阻塞状态等等。本篇文章主要讲解Java线程阻塞方法sleep()与wait()的使用和区别。 sleep()方法 sleep()方法是Thread类中一个静态方法。sleep()方法的作用…

    Java 2023年5月19日
    00
  • Java如何将若干时间区间进行合并的方法步骤

    Java如何将若干时间区间进行合并的方法步骤: 1.首先需要将若干时间区间存储到一个List集合中。时间区间可以使用Java中的Date或LocalDateTime对象来表示,或者使用字符串表示,需要转换为相应的日期对象。 2.对这个区间集合进行排序,按照开始时间升序排序。 3.新建一个结果集合,将第一个区间加入结果集合,用一个current指针指向结果集合…

    Java 2023年5月20日
    00
  • 图书管理系统java版

    “图书管理系统java版”完整攻略 1. 简介 “图书管理系统java版”是一个用Java语言开发的图书管理系统,旨在提供一个方便管理图书信息的工具,可实现添加、删除、修改、查询等功能。 2. 环境搭建 在开始使用“图书管理系统java版”之前,需要先搭建Java环境和数据库环境。具体步骤如下: 下载安装Java开发工具包(JDK),建议使用最新版本。 下载…

    Java 2023年5月20日
    00
  • 文件格式有哪些,常见文件格式种类大全(中英对照)

    文件格式有哪些,常见文件格式种类大全(中英对照) 在计算机中,不同的文件格式对应着不同的数据类型。每种数据类型所使用的文件格式也会不同。本文将列举一些常见的文件格式并进行简要介绍和中英对照。 图片文件格式 JPEG (.jpg, .jpeg) JPEG全名为Joint Photographic Experts Group,是一种带有损压缩的图像格式,被广泛应…

    Java 2023年6月15日
    00
  • Springboot添加jvm监控实现数据可视化

    Spring Boot提供了一个Actuator模块,可以用来实现JVM监控并将监控数据可视化展示。下面是实现的完整攻略: 1. 添加JVM监控依赖 在项目的pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <arti…

    Java 2023年5月19日
    00
  • 详解Java多线程tryLock()方法使用

    详解Java多线程tryLock()方法使用 什么是tryLock()方法 tryLock方法是Java多线程中使用的一种同步锁机制。它尝试获取锁,如果锁可用则获取锁并返回true,如果锁不可用则直接返回false,而不会阻塞等待锁。 tryLock方法的定义为: public boolean tryLock() tryLock方法会试图去获取锁,如果锁已经…

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