关于后端:Spring-Boot-Admin-添加报警提醒和登录验证功能

3次阅读

共计 4359 个字符,预计需要花费 11 分钟才能阅读完成。

Spring Boot Admin(SBA)是一个开源的社区我的项目,用于治理和监控 Spring Boot 应用程序,它提供了具体的衰弱信息、内存信息、JVM 零碎和环境属性、垃圾回收信息、日志设置和查看、定时工作查看、Spring Boot 缓存查看和治理等性能。
SBA 监控概览如下图所示:

上一篇咱们曾经说了 SBA 的搭建和应用了,点击拜访:https://mp.weixin.qq.com/s/cciU2u-LXnQHIrHN9uhVYA
然而下面的应用是无奈满足咱们生产环境的要求的,生产环境至多还须要配置以下两个性能:

  1. 被监控的 Spring Boot 我的项目的报警性能,因为咱们不能时刻盯着 SBA 监控零碎,但当零碎呈现问题时,咱们又须要第一工夫晓得,因而报警揭示性能是必不可少的。
  2. 默认状况下 SBA 的应用是没有权限验证的,也就是所有人晓得了地址都能够失常应用,这不满足生产零碎的平安要求,所以用户受权性能也是必不可少的。

接下来咱们来看以上性能的具体实现。

1. 增加报警揭示性能

报警揭示性能是基于邮箱实现的,当然也能够应用其余的揭示性能,如钉钉或飞书机器人揭示也是能够的,但邮箱报警性能的实现老本最低,所以本文咱们就来看邮箱的报警揭示性能的具体实现。

1.1 增加邮件反对框架

在 SBA 的依赖文件 pom.xml 中增加以下配置:

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

1.2 配置收、发邮箱信息

在 SBA 的配置文件 application.properties 中增加以下收、发邮箱的配置:

# 配置发送邮箱
spring.boot.admin.notify.mail.from=xxx@qq.com
# 配置接管邮箱
spring.boot.admin.notify.mail.to=xxx@qq.com
# 配置邮箱 smtp 地址(qq 发送邮箱的固定 host 是 smtp.qq.com)spring.mail.host=smtp.qq.com
# 配置邮箱受权码(此处为受权码,而非明码,获取受权码本文下一步有阐明)spring.mail.password=xxxxxx
# 配置邮箱的账户名(这个是下面配置发送邮件的账户名)spring.mail.username=xxx@qq.com

1.2.1 开启 SMTP 服务

SMTP 是一种提供牢靠且无效的电子邮件传输的协定。发送的邮箱必要要开启 SMTP 服务,否则就实现不了邮件的发送性能了。如果应用的是 QQ 邮箱参考以下配置,关上 QQ 邮箱,在邮箱的账号设置中找到 IMAP/SMTP 服务并开启它,如下图所示:

1.2.2 生成受权码

发送的邮箱要生成邮箱受权码,以 QQ 邮箱为例,在邮箱的账号设置中找到“生成受权码”,点击即可生成,如下图所示:

1.3 邮件报警测试

通过以上配置之后, 无需增加任何代码!!!无需增加任何代码!!!无需增加任何代码!!! 就能够实现我的项目状态扭转的邮件揭示性能了。
咱们来测试一下,敞开我本地被监控的 Spring Boot 我的项目,邮箱会收到我的项目离线信息,如下图所示:

当我把被监控的 Spring Boot 我的项目启动之后,邮箱会收到服务器启动邮件,如下图所示:

也就是说,当你配置好了收、发邮箱之后,Spring Boot Admin 会在被监控的我的项目停机或启动时,主动发送邮件到接管揭示的邮箱了。

1.4 注意事项

报警性能注意事项有以下几个:

  1. 发送邮件的邮箱必须开启 SMTP 服务。
  2. 发送邮箱无需设置明码,只须要为配置项“spring.mail.password”设置邮箱受权码即可。
  3. 发送邮箱和接管邮箱能够是同一个邮箱地址。
  4. SBA 邮箱报警揭示性能无需增加任何代码,只须要增加相应的框架反对,而后再配置上正确的收、发邮箱即可。

    1.5 配置多个报警告诉邮箱

    通常我的项目的报警性能,须要告诉的是一群相干负责人,而不是一个人,比方可能会告诉运维负责人、程序负责人,还有项目经理等,而 SBA 多人揭示邮箱的配置也很容易,只须要在 SBA 的配置文件中增加多个收件邮箱即可,多个邮箱间应用英文逗号隔开,如下配置所示:

    # 配置接管邮箱
    spring.boot.admin.notify.mail.to=xxx@qq.com,yyy@qq.com

    2. 拜访权限设置

    SBA 默认是没有权限验证的,而生产环境肯定要配置权限验证,咱们这里通过增加 Spring Security 框架来实现权限拦挡,具体实现如下。

    2.1 增加 Security 框架反对

    在 SBA 的依赖文件 pom.xml 中增加如下配置:

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

    2.2 设置登录账户

    在 SBA 的配置文件 application.properties 中增加如下配置:

    # 设置登录用户名、明码和角色
    spring.security.user.name=java666
    spring.security.user.password=java666
    spring.security.user.roles=SBA_ADMIN

    2.3 权限资源设置

    接下来在 SBA 我的项目中,增加以下资源设置类,如下代码所示(间接复制到我的项目中即可应用):

    import de.codecentric.boot.admin.server.config.AdminServerProperties;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.builders.WebSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
    import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
    
    @EnableWebSecurity
    @Configuration(proxyBeanMethods = false)
    public class AdminSecurityConfig extends WebSecurityConfigurerAdapter {
     private final String adminContextPath;
    
     public AdminSecurityConfig(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()
                 .antMatchers(adminContextPath + "/assets/**").permitAll()
                 .antMatchers(adminContextPath + "/login").permitAll()
                 .antMatchers(adminContextPath + "/instances/**").permitAll()
                 .anyRequest().authenticated()
                 .and()
                 .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                 .logout().logoutUrl(adminContextPath + "/logout").and()
                 .httpBasic().and()
                 .csrf()
                 .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                 .ignoringAntMatchers(
                         adminContextPath + "/instances",
                         adminContextPath + "/actuator/**"
                 );
     }
    
     @Override
     public void configure(WebSecurity web) {web.ignoring().antMatchers("/actuator/**");
     }
    }

    2.4 拜访 SBA

    此时拜访 SBA 监控零碎就须要输出用户名和明码能力失常应用了,如下图所示:

    咱们输出 2.2 步骤中设置的用户名和明码即可登录,如下图所示:

    点击登记就退出 SBA 零碎了。

    总结

    SBA 报警揭示性能只须要增加邮件发送框架,配置正确的收、发邮件,无需增加任何代码就能够实现报警揭示性能了,而且报警揭示的邮箱能够配置多个。SBA 可通过增加 Spring Security 来实现用户的权限效验。

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java 面试真题解析

面试合集:gitee.com/mydb/interview

正文完
 0