前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot Admin 添加报警提醒和登录验证功能!

Spring Boot Admin 添加报警提醒和登录验证功能!

作者头像
磊哥
发布2022-05-09 15:47:30
9090
发布2022-05-09 15:47:30
举报
文章被收录于专栏:王磊的博客王磊的博客

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 中添加以下配置:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

1.2 配置收、发邮箱信息

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

代码语言:javascript
复制
# 配置发送邮箱
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 服务并开启它,如下图所示:

image.png
image.png
1.2.2 生成授权码

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

image.png
image.png

1.3 邮件报警测试

经过以上配置之后,无需添加任何代码!!!无需添加任何代码!!!无需添加任何代码!!!就可以实现项目状态改变的邮件提醒功能了。 我们来测试一下,关闭我本地被监控的 Spring Boot 项目,邮箱会收到项目离线信息,如下图所示:

image.png
image.png

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

image.png
image.png

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

1.4 注意事项

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

  1. 发送邮件的邮箱必须开启 SMTP 服务。
  2. 发送邮箱无需设置密码,只需要为配置项“spring.mail.password”设置邮箱授权码即可。
  3. 发送邮箱和接收邮箱可以是同一个邮箱地址。
  4. SBA 邮箱报警提醒功能无需添加任何代码,只需要添加相应的框架支持,然后再配置上正确的收、发邮箱即可。

1.5 配置多个报警通知邮箱

通常项目的报警功能,需要通知的是一群相关负责人,而不是一个人,比如可能会通知运维负责人、程序负责人,还有项目经理等,而 SBA 多人提醒邮箱的配置也很容易,只需要在 SBA 的配置文件中添加多个收件邮箱即可,多个邮箱间使用英文逗号隔开,如下配置所示:

代码语言:javascript
复制
# 配置接收邮箱
spring.boot.admin.notify.mail.to=xxx@qq.com,yyy@qq.com

2.访问权限设置

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

2.1 添加 Security 框架支持

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

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.2 设置登录账户

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

代码语言:javascript
复制
# 设置登录用户名、密码和角色
spring.security.user.name=java666
spring.security.user.password=java666
spring.security.user.roles=SBA_ADMIN

2.3 权限资源设置

接下来在 SBA 项目中,添加以下资源设置类,如下代码所示(直接复制到项目中即可使用):

代码语言:javascript
复制
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 监控系统就需要输入用户名和密码才能正常使用了,如下图所示:

image.png
image.png

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

image.png
image.png

点击注销就退出 SBA 系统了。

总结

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.添加报警提醒功能
    • 1.1 添加邮件支持框架
      • 1.2 配置收、发邮箱信息
        • 1.2.1 开启 SMTP 服务
        • 1.2.2 生成授权码
      • 1.3 邮件报警测试
        • 1.4 注意事项
          • 1.5 配置多个报警通知邮箱
          • 2.访问权限设置
            • 2.1 添加 Security 框架支持
              • 2.2 设置登录账户
                • 2.3 权限资源设置
                  • 2.4 访问 SBA
                  • 总结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档