Spring Boot Admin提供了可视化的监控服务,通过Spring Security的机制保护管理端点,以保证监控数据的安全性。可以使用Spring Security添加认证和授权功能,例如基于用户角色的访问控制、登录页面、注销等。需要配置Spring Security的相关依赖,并在配置文件中设置安全属性。可以使用默认的用户名和密码进行登录,并为管理员用户配置访问授权。Spring Boot Admin还提供了自定义登录页面的功能,以便更好地满足实际需求。
在本教程开启之前,需要先进行SpringBoot-Admin项目的搭建和开启,并在需要被检控的客户端引入spring-boot-admin-client包,并填写相关配置参数。具体步骤可以参考我的上篇文章:SpringBoot-开启Admin监控服务。SpringBoot-Admin项目搭建完成后,我们开始Security机制的配置。
Spring Security是Spring框架的一个强大模块,专注于提供全面的企业级安全服务。其主要目标是保护应用程序免受各种安全威胁,包括身份验证、授权、攻击防护等。以下是Spring Security的主要特性:
引入Spring Security的目的是为了在Spring Boot Admin中加强安全性,确保监控服务的操作和数据受到有效的保护,提供更可靠的监控服务。
首先,我们需要在客户端和服务端都使用 pom.xml 引入 security 包。
在 pom.xml 中引入 Spring Security 的 starter 包,以加入安全认证和授权功能。
org.springframework.boot spring-boot-starter-security
添加完依赖后,刷新maven自动导入jar包。
然后,我们需要在SBA项目(服务端)的 application.yml 里增加 security 配置,在服务端项目的 application.yml 中添加 Spring Security 的相关配置,包括用户名和密码。
spring: #开启安全认证 用户名和密码 security: user: name: "root" password: "root"
接着,我们需要在SBA项目(服务端)增加 SecuritySecureConfig 类。
我们新建 config 目录,目录下创建 SecuritySecureConfig 类,配置 Spring Security 的安全策略,包括登录、注销和 CSRF防护 等。
详细代码如下:
SecuritySecureConfig.java
package com.config; 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.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; import org.springframework.security.web.csrf.CookieCsrfTokenRepository; @Configuration public class SecuritySecureConfig extends WebSecurityConfigurerAdapter { private final String adminContextPath; public SecuritySecureConfig(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+"/actuator/health").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/**" ); } }
下一步,我们需要在被监控项目(客户端)的 application.yml 里增加 security 连接信息。
在被监控的客户端项目中,我们需要在 application.yml 中配置与服务端相同的用户名和密码信息,以建立连接。
spring: application: ## 注册服务名 name: ProjectSchedule # springbootAdmin boot: admin: client: url: http://127.0.0.1:8088 username: 'root' password: 'root' jackson: serialization: indent_output: true
最后一步,我们需要在发布完成后,测试改动后的变化及是否连接成功。
可以通过访问服务端地址,输入账号密码登录,查看在线客户端信息,确保连接成功。
服务端访问,需要输入账号密码
在服务端,我们可以看到客户端的在线信息。
点击进去看到更详细的内容。
说明连接成功!Security 机制顺利开启!这样,Spring Boot Admin 的安全机制就顺利地加入到监控服务中,为监控数据的安全性提供了保障!
引入Spring Security机制有助于确保监控服务的身份验证和授权得到有效管理。通过设定用户名和密码,可以精确控制用户对监控端点的访问权限,从而提高系统的整体安全性。
Spring Security提供了可靠的机制,确保敏感监控数据仅对授权用户可见。这有助于防范未经授权的访问,保障监控数据的隐私与安全性。
引入安全机制有助于系统抵御潜在的恶意攻击。通过实施身份验证和授权管理,我们能够限制对监控服务的非法访问,从而降低系统遭受恶意入侵的风险。
通过加强安全性措施,系统的稳定性也将得到提升。防止未授权访问和恶意攻击有助于减少潜在的系统故障和不稳定因素,确保监控服务的可靠性。
引入Security机制是一种符合安全最佳实践的做法,有助于确保监控服务的开发和部署过程符合业界的安全规范,提高整体系统的可信度。