文章目录
- 1. 定义
- 1.集成流程
- 1)添加 Spring Boot Admin 依赖
- 2)配置 Spring Boot Admin
- 3)启动 Spring Boot Admin 服务
- 4)访问 Spring Boot Admin 服务
- 5)添加 Spring Security 依赖
- 6)配置 Spring Security
- 7)验证
- 总结
Spring Boot Admin 是一个用于监控和管理 Spring Boot 应用程序的工具,而 Spring Security 是一个用于提供身份验证和授权的强大框架。本文们将探讨如何将 Spring Boot Admin 与 Spring Security 集成,以确保管理端的安全性。
1. 定义
-
Spring Boot Admin:
Spring Boot Admin 是一个基于Web的用户界面,用于集中监控和管理多个 Spring Boot 应用程序。它提供了应用程序概览、日志查看、指标监控等功能,方便开发人员和运维人员追踪应用程序的状态和性能。
📢 如何使用请参考 【Spring实战】24 使用 Spring Boot Admin 管理和监控应用 文章
-
Spring Security:
Spring Security 是一个用于提供身份验证、授权、攻击防护等安全功能的框架。它为 Spring 应用程序提供了全面的安全性支持,包括用户认证、角色授权、HTTPS支持等。
📢 如何使用请参考 【Spring实战】11 Security 常用配置 文章
1.集成流程
为了保障 Spring Boot Admin 的安全性,我们可以使用 Spring Security 来进行身份验证和授权。以下是集成的详细步骤:
1)添加 Spring Boot Admin 依赖
首先,在你的 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>
2)配置 Spring Boot Admin
在 Spring Boot 项目的配置文件中,添加 Spring Boot Admin 的配置:
application.properties
server.port=8090
spring.boot.admin.context-path=/admin
3)启动 Spring Boot Admin 服务
我们看到服务在 8090 端口上启动了
4)访问 Spring Boot Admin 服务
http://localhost:8090/admin
当我们访问 URL 的时候,可以直接访问 Admin 服务 无需任何登录验证
5)添加 Spring Security 依赖
首先,在你的 Spring Boot 项目中添加 Spring Security 的依赖:
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
6)配置 Spring Security
在你的 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
路径。
7)验证
重新启动一下服务,通过下面三个步骤去验证
-
登录 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 应用程序。请记得根据实际需求调整角色和权限配置,以满足您的应用程序的安全性要求。