Spring Boot Admin 是一个用于监控和管理 Spring Boot 应用程序的工具,而 Spring Security 是一个用于提供身份验证和授权的强大框架。本文们将探讨如何将 Spring Boot Admin 与 Spring Security 集成,以确保管理端的安全性。
Spring Boot Admin:
Spring Boot Admin 是一个基于Web的用户界面,用于集中监控和管理多个 Spring Boot 应用程序。它提供了应用程序概览、日志查看、指标监控等功能,方便开发人员和运维人员追踪应用程序的状态和性能。
📢 如何使用请参考 【Spring实战】24 使用 Spring Boot Admin 管理和监控应用 文章
Spring Security:
Spring Security 是一个用于提供身份验证、授权、攻击防护等安全功能的框架。它为 Spring 应用程序提供了全面的安全性支持,包括用户认证、角色授权、HTTPS支持等。
📢 如何使用请参考 【Spring实战】11 Security 常用配置 文章
为了保障 Spring Boot Admin 的安全性,我们可以使用 Spring Security 来进行身份验证和授权。以下是集成的详细步骤:
首先,在你的 Spring Boot 项目中添加 Spring Boot Admin 的依赖:
pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>3.2.0</version>
</dependency>
在 Spring Boot 项目的配置文件中,添加 Spring Boot Admin 的配置:
application.properties
server.port=8090
spring.boot.admin.context-path=/admin
我们看到服务在 8090 端口上启动了
http://localhost:8090/admin
当我们访问 URL 的时候,可以直接访问 Admin 服务 无需任何登录验证
首先,在你的 Spring Boot 项目中添加 Spring Security 的依赖:
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在你的 Spring Boot 项目中,创建一个配置类来配置 Spring Security。例如,创建一个 SecurityConfig
类:
package com.cheney.admin.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import java.util.ArrayList;
import java.util.List;
import static org.springframework.security.config.Customizer.withDefaults;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService(PasswordEncoder encoder){
List<UserDetails> users = new ArrayList<>();
users.add(new User("test",encoder.encode("test"), List.of(new SimpleGrantedAuthority("ROLE_TEST"))));
users.add(new User("admin",encoder.encode("admin"), List.of(new SimpleGrantedAuthority("ROLE_ADMIN"))));
return new InMemoryUserDetailsManager(users);
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
).httpBasic(withDefaults());
return http.build();
}
}
在这个例子中,我们配置了一个简单的基于角色的授权策略。用户需要拥有 ADMIN
角色才能访问 /admin
路径。
重新启动一下服务,通过下面三个步骤去验证
登录 Spring Boot Admin 应该如我们期待的样子,有登录验证
http://localhost:8090/admin
使用 test 用户登录,期待不能正常进入 Spring Boot Admin 后台管理画面,因为没有权限
输入用户名和密码之后,点击登录按钮。发现 403 无权访问
使用 admin 用户登录,期待正常进入 Spring Boot Admin 后台管理画面
输入用户名和密码之后,点击登录按钮。发现可以正常访问啦
通过以上步骤,我们成功地将 Spring Boot Admin 集成到了 Spring Security 中,确保了管理端的安全性。现在,只有拥有合适角色的用户才能访问 Spring Boot Admin 的监控和管理功能,增强了系统的安全性。这种集成使得开发人员和运维人员能够更加安全地管理和监控 Spring Boot 应用程序。请记得根据实际需求调整角色和权限配置,以满足您的应用程序的安全性要求。