1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Spring Boot Admin 報警提醒和登錄驗證功能實現(xiàn)!

        共 4870字,需瀏覽 10分鐘

         ·

        2022-01-26 21:20

        b55d61ea6516644426f46d3449cb7be7.webp

        作者 | 磊哥

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

        轉(zhuǎn)載請聯(lián)系授權(quán)(微信ID:GG_Stone)

        Spring Boot Admin(SBA)是一個開源的社區(qū)項目,用于管理和監(jiān)控 Spring Boot 應(yīng)用程序,它提供了詳細(xì)的健康信息、內(nèi)存信息、JVM 系統(tǒng)和環(huán)境屬性、垃圾回收信息、日志設(shè)置和查看、定時任務(wù)查看、Spring Boot 緩存查看和管理等功能。SBA 監(jiān)控概覽如下圖所示:dc4a76c2f1f4a71d8016f73b116b6d62.webp上一篇我們已經(jīng)說了 SBA 的搭建和使用了,點擊訪問:https://mp.weixin.qq.com/s/cciU2u-LXnQHIrHN9uhVYA然而上面的使用是無法滿足我們生產(chǎn)環(huán)境的要求的,生產(chǎn)環(huán)境至少還需要配置以下兩個功能:

        1. 被監(jiān)控的 Spring Boot 項目的報警功能,因為我們不能時刻盯著 SBA 監(jiān)控系統(tǒng),但當(dāng)系統(tǒng)出現(xiàn)問題時,我們又需要第一時間知道,因此報警提醒功能是必不可少的。
        2. 默認(rèn)情況下 SBA 的使用是沒有權(quán)限驗證的,也就是所有人知道了地址都可以正常使用,這不滿足生產(chǎn)系統(tǒng)的安全要求,所以用戶授權(quán)功能也是必不可少的。

        接下來我們來看以上功能的具體實現(xiàn)。

        1.添加報警提醒功能

        報警提醒功能是基于郵箱實現(xiàn)的,當(dāng)然也可以使用其他的提醒功能,如釘釘或飛書機(jī)器人提醒也是可以的,但郵箱報警功能的實現(xiàn)成本最低,所以本文我們就來看郵箱的報警提醒功能的具體實現(xiàn)。

        1.1 添加郵件支持框架

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

        <dependency>
        ????<groupId>org.springframework.bootgroupId>
        ????<artifactId>spring-boot-starter-mailartifactId>
        dependency>

        1.2 配置收、發(fā)郵箱信息

        在 SBA 的配置文件 application.properties 中添加以下收、發(fā)郵箱的配置:

        #?配置發(fā)送郵箱
        [email protected]
        #?配置接收郵箱
        [email protected]
        #?配置郵箱?smtp?地址(qq?發(fā)送郵箱的固定?host?是?smtp.qq.com)
        spring.mail.host=smtp.qq.com
        #?配置郵箱授權(quán)碼(此處為授權(quán)碼,而非密碼,獲取授權(quán)碼本文下一步有說明)
        spring.mail.password=xxxxxx
        #?配置郵箱的賬戶名(這個是上面配置發(fā)送郵件的賬戶名)
        [email protected]

        1.2.1 開啟 SMTP 服務(wù)

        SMTP 是一種提供可靠且有效的電子郵件傳輸?shù)膮f(xié)議。發(fā)送的郵箱必要要開啟 SMTP 服務(wù),否則就實現(xiàn)不了郵件的發(fā)送功能了。如果使用的是 QQ 郵箱參考以下配置,打開 QQ 郵箱,在郵箱的賬號設(shè)置中找到 IMAP/SMTP 服務(wù)并開啟它,如下圖所示:cfe8a5a374adcf1313fc3af164149d4a.webp

        1.2.2 生成授權(quán)碼

        發(fā)送的郵箱要生成郵箱授權(quán)碼,以 QQ 郵箱為例,在郵箱的賬號設(shè)置中找到“生成授權(quán)碼”,點擊即可生成,如下圖所示:a4473efb1b83bea85943026ba0f901bf.webp

        1.3 郵件報警測試

        經(jīng)過以上配置之后,**無需添加任何代碼?。?!無需添加任何代碼!?。o需添加任何代碼?。?!**就可以實現(xiàn)項目狀態(tài)改變的郵件提醒功能了。我們來測試一下,關(guān)閉我本地被監(jiān)控的 Spring Boot 項目,郵箱會收到項目離線信息,如下圖所示:e8faaef4b650fba42bc8d385d45e2cec.webp當(dāng)我把被監(jiān)控的 Spring Boot 項目啟動之后,郵箱會收到服務(wù)器啟動郵件,如下圖所示:401069eed90422250adeb8ba2e28c28f.webp也就是說,當(dāng)你配置好了收、發(fā)郵箱之后,Spring Boot Admin 會在被監(jiān)控的項目停機(jī)或啟動時,自動發(fā)送郵件到接收提醒的郵箱了。

        1.4 注意事項

        報警功能注意事項有以下幾個:

        1. 發(fā)送郵件的郵箱必須開啟 SMTP 服務(wù)。
        2. 發(fā)送郵箱無需設(shè)置密碼,只需要為配置項“spring.mail.password”設(shè)置郵箱授權(quán)碼即可。
        3. 發(fā)送郵箱和接收郵箱可以是同一個郵箱地址。
        4. SBA 郵箱報警提醒功能無需添加任何代碼,只需要添加相應(yīng)的框架支持,然后再配置上正確的收、發(fā)郵箱即可。

        1.5 配置多個報警通知郵箱

        通常項目的報警功能,需要通知的是一群相關(guān)負(fù)責(zé)人,而不是一個人,比如可能會通知運維負(fù)責(zé)人、程序負(fù)責(zé)人,還有項目經(jīng)理等,而 SBA 多人提醒郵箱的配置也很容易,只需要在 SBA 的配置文件中添加多個收件郵箱即可,多個郵箱間使用英文逗號隔開,如下配置所示:

        #?配置接收郵箱
        spring.boot.admin.notify.mail.to=xxx@qq.com,yyy@qq.com

        2.訪問權(quán)限設(shè)置

        SBA 默認(rèn)是沒有權(quán)限驗證的,而生產(chǎn)環(huán)境一定要配置權(quán)限驗證,我們這里通過添加 Spring Security 框架來實現(xiàn)權(quán)限攔截,具體實現(xiàn)如下。

        2.1 添加 Security 框架支持

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

        <dependency>
        ????<groupId>org.springframework.bootgroupId>
        ????<artifactId>spring-boot-starter-securityartifactId>
        dependency>

        2.2 設(shè)置登錄賬戶

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

        #?設(shè)置登錄用戶名、密碼和角色
        spring.security.user.name=java666
        spring.security.user.password=java666
        spring.security.user.roles=SBA_ADMIN

        2.3 權(quán)限資源設(shè)置

        接下來在 SBA 項目中,添加以下資源設(shè)置類,如下代碼所示(直接復(fù)制到項目中即可使用):

        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 監(jiān)控系統(tǒng)就需要輸入用戶名和密碼才能正常使用了,如下圖所示:9b5496953d01b37963ae6808d1b1337c.webp我們輸入 2.2 步驟中設(shè)置的用戶名和密碼即可登錄,如下圖所示:15afede9ef8ca6211d691498da748240.webp點擊注銷就退出 SBA 系統(tǒng)了。

        總結(jié)

        SBA 報警提醒功能只需要添加郵件發(fā)送框架,配置正確的收、發(fā)郵件,無需添加任何代碼就可以實現(xiàn)報警提醒功能了,而且報警提醒的郵箱可以配置多個。SBA 可通過添加 Spring Security 來實現(xiàn)用戶的權(quán)限效驗。

        是非審之于己,毀譽(yù)聽之于人,得失安之于數(shù)。

        公眾號:Java面試真題解析

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

        5f668e45390bd64c62f18e1ac20a2be7.webp

        往期推薦

        4fcc17009ca7be2bd65c4f6b26e1ab11.webp

        Spring Boot Admin,賊好使!


        90b39712bb07195ef0f4ddda4a2721f4.webp

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


        c7a196f64bdb2315713cfdb6a36e0b20.webp

        SpringCloud組件:Ribbon負(fù)載均衡策略及執(zhí)行原理!


        瀏覽 75
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美黄色电影在线观看 | 《秘爱》床戏高潮 | 亚洲天堂在线观看视频 | 亚洲国产欧美手机在线 | 日韩成人在线免费观看 | 爱情电影aqdy三上悠亚 | 天天搞天天搞天天搞 | 麻豆91视频 | 天天爽夜夜爽人人爽曰AV | 国产精品露脸在线 |