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

相关推荐
zdl6863 分钟前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情6 分钟前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player7 分钟前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明13 分钟前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
RuoyiOffice21 分钟前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
鹤旗22 分钟前
While语句,do-while语句,for语句
java·jvm·算法
小碗羊肉32 分钟前
【从零开始学Java | 第十八篇】BigInteger
java·开发语言·新手入门
sky wide42 分钟前
[特殊字符] Docker Swarm 集群搭建指南
java·docker·容器
wuqingshun3141591 小时前
谈谈你对springAop动态代理的理解?
java·jvm
执笔画流年呀1 小时前
PriorityQueue(堆)续集
java·开发语言