Spring Boot Admin 报警提醒和登录验证功能实现!

0c68ad65c03be0b08815f59e06e276e5.png

作者 | 磊哥

来源 | Java中文社群(ID:javacn666)

转载请联系授权(微信ID:GG_Stone)

Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序,它提供了详细的健康信息、内存信息、JVM 系统和环境属性、垃圾回收信息、日志设置和查看、定时任务查看、Spring Boot 缓存查看和管理等功能。SBA 监控概览如下图所示:198740dcc138f4c2f185ced355f4cf1a.png上一篇我们已经说了 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 服务并开启它,如下图所示:7c0f3ef56638b952a9e2c75765d7104e.png

1.2.2 生成授权码

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

1.3 邮件报警测试

经过以上配置之后,**无需添加任何代码!!!无需添加任何代码!!!无需添加任何代码!!!**就可以实现项目状态改变的邮件提醒功能了。我们来测试一下,关闭我本地被监控的 Spring Boot 项目,邮箱会收到项目离线信息,如下图所示:862befc4e0eca96df3bafe95cb42dc5d.png当我把被监控的 Spring Boot 项目启动之后,邮箱会收到服务器启动邮件,如下图所示:78b19ca3a476bde4f8f8b4eed4185334.png也就是说,当你配置好了收、发邮箱之后,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();}@Overrideprotected 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/**");}@Overridepublic void configure(WebSecurity web) {web.ignoring().antMatchers("/actuator/**");}
}

2.4 访问 SBA

此时访问 SBA 监控系统就需要输入用户名和密码才能正常使用了,如下图所示:24031bdb2d55130ce211760e241b45ec.png我们输入 2.2 步骤中设置的用户名和密码即可登录,如下图所示:b101f0242fc35aaef4f4e32979407268.png点击注销就退出 SBA 系统了。

总结

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

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

公众号:Java面试真题解析

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

d00ab117c72d2af0c5084e179c4d42aa.gif

往期推荐

d7e3df9c6afd514ab005bfe802bb084d.png

Spring Boot Admin,贼好使!


796bb18f7bc46a4ecec3c3a310aa94da.png

扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?


c85f9bc66df2b734dd9603075a210a89.png

SpringCloud组件:Ribbon负载均衡策略及执行原理!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Hashtable rehash()方法与示例

哈希表类rehash()方法 (Hashtable Class rehash() method) rehash() method is available in java.util package. rehash()方法在java.util包中可用。 rehash() method is used to extend the capacity and it is invoked implicitly if the number of keys limit exceeds hash…

企业Shell面试题18:单词及字母去重排序案例

1、按单词出现频率降序排序&#xff01; 2、按字母出现频率降序排序&#xff01; the squid project provides a number of resources to assist users design,implement and support squid installations. Please browse the documentation and support sections for more inf…

5种高大上的yml读取方式,你知道几种?

我们今天就来点实战&#xff0c;总结一下除了烂大街的Value和ConfigurationProperties外&#xff0c;还有哪些读取yml配置文件的方法&#xff1f;1、Environment在Spring中有一个类Environment&#xff0c;它可以被认为是当前应用程序正在运行的环境&#xff0c;它继承了Proper…

Java Hashtable equals()方法与示例

哈希表类equals()方法 (Hashtable Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether equality of this Hashtable with the given Object or not. equals()方法用于检…

为什么ConcurrentHashMap不允许插入null值?

作者&#xff1a;磊哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 Java 语言中&#xff0c;ConcurrentHashMap 和 Hashtable 这些线程安全的集合是不允许 key 或 value 插…

.NET APlayer播放器 demo

工作需要,想开发一款播放器,当无意间浏览到APlayer的时候大爱啊,有木有迅速投入精力,在APlayer论坛看大牛们的作品及经验,看SDK中提供的chm电子书最后看了博客园中周见智的文章(灰常好!最终作品也用的他的demo改进)先来晒一下最终的效果图片。 效果截图&#xff1a;1.初始界面。…

Java Formatter format()方法及示例

Formatter类format()方法 (Formatter Class format() method) Syntax: 句法&#xff1a; public Formatter format(Locale lo, String frmt, Object... args);public Formatter format(String frmt, Object... args);format() method is available in java.util package. form…

Spring Cloud Alibaba Nacos 服务注册与发现功能实现!

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分&#xff0c;它提供了两个重要的功能&#xff1a;服务注册与发现和统一…

Java类class cast()方法及示例

类class cast()方法 (Class class cast() method) cast() method is available in java.lang package. 在java.lang包中提供了cast()方法 。 cast() method casts this Object to the class or an interface denoted by this Class object. cast()方法将此Object强制转换为该Cl…

加分进了字节,MySQL真yyds!

Java研发工程师必备技能非MySQL莫属&#xff0c;虽说易学好上手&#xff0c;但应对大厂面试&#xff0c;最容易遭遇滑铁卢、功败垂成的也是它。上手简单&#xff0c;玩转难&#xff0c;才是这款开源数据库叱咤业界多年的真实写照。MySQL 8.0正式版的到来&#xff0c;在性能和速…

基于Fragment的百度地图框架的使用

博客:http://blog.csdn.net/developer_jiangqq (一)基本介绍(Fragment和SupportMapFragment): Fragment的使用现在安卓APP开发中用的比较多了&#xff0c;Fragment名称为碎片和Activity有着相似的生命管理周期&#xff0c;基本作用可以进行开发兼容手机和平板的app,较少兼容分辨…

Nacos服务注册与发现的2种实现方法!

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Spring Cloud Alibaba 技术体系中的 Nacos&#xff0c;提供了两个重要的功能&#xff1a;注册中心&#xff08;服务注册与发…

java settime_Java日历setTime()方法及示例

java settime日历类setTime()方法 (Calendar Class setTime() method) setTime() method is available in java.util package. setTime()方法在java.util包中可用。 setTime() method is used to sets time with the specified Date(d) of this Calendar. setTime()方法用于使用…

面试必备:Spring 面试 63 问!

作者 | 夏目blog.csdn.net/wuzhiwei549/article/details/122324261Sping原理Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack&#xff0…

javafor循环打印图案_C程序使用循环打印盒子图案

javafor循环打印图案Input a number and print the following box pattern in C language, 输入数字并以C语言打印以下框形 &#xff0c; 4 4 4 4 4 4 44 3 3 3 3 3 4 4 3 2 2 2 3 4 4 3 2 1 2 3 4 4 3 2 2 2 3 4 4 3 3 3 3 3 4 4 4 4 4 4 4 4 Input format: 输入…

懒人专用SSH框架下的基本配置

项目结束&#xff0c;马上就要出去找工作了&#xff0c;这段时间也不用写项目&#xff0c;就整理了一些以后可能会用的到的配置&#xff0c;还有一个原因就是我不想去记忆。。。。。。。。。SSH下application.xml的基本配置&#xff0c;应该满足一般的开发需求<?xml versio…

为什么HashMap会产生死循环?

作者&#xff1a;磊哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;面试合集&#xff1a;https://gitee.com/mydb/interviewHashMap 死循环是一个比较常见、比较经典的问题&am…

iOS的自动化测试

2019独角兽企业重金招聘Python工程师标准>>> iOS的自动化测试:http://www.360doc.com/content/13/1225/22/1912775_340124906.shtml 转载于:https://my.oschina.net/CeShiXiaoSongShu/blog/496660

为什么阿里全面推动 K8S 落地,咬紧牙关也要搞云原生?

身为让容器应用实现大规模工业生产的一大功臣&#xff0c;过去几年&#xff0c;Kubernetes 势头迅猛&#xff0c;BAT、京东、美团、字节都走上了全域容器化部署以及云原生架构的康庄大道。而作为支撑阿里万亿级应用背后的核心&#xff0c;阿里云早在2016年就顺势搭上容器化这趟…

python字符串find_Python字符串| 带示例的find()方法

python字符串findString.find()方法 (String.find() Method) find() is an inbuilt method of python, it is used to check whether a sub-string exists in the string or not. If sub-string exists, the method returns the lowest index of the sub-string, if sub-string…