【Spring实战】26 使用Spring Security 保护 Spring Boot Admin

文章目录

    • [1. 定义](#1. 定义)
    • 1.集成流程
      • [1)添加 Spring Boot Admin 依赖](#1)添加 Spring Boot Admin 依赖)
      • [2)配置 Spring Boot Admin](#2)配置 Spring Boot Admin)
      • [3)启动 Spring Boot Admin 服务](#3)启动 Spring Boot Admin 服务)
      • [4)访问 Spring Boot Admin 服务](#4)访问 Spring Boot Admin 服务)
      • [5)添加 Spring Security 依赖](#5)添加 Spring Security 依赖)
      • [6)配置 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

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

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

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

6)配置 Spring Security

在你的 Spring Boot 项目中,创建一个配置类来配置 Spring Security。例如,创建一个 SecurityConfig 类:

java 复制代码
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 应用程序。请记得根据实际需求调整角色和权限配置,以满足您的应用程序的安全性要求。

相关推荐
奋进的芋圆1 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin1 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20051 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉2 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国2 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882482 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈2 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_992 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹3 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理
专注_每天进步一点点3 小时前
【java开发】写接口文档的札记
java·开发语言