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

相关推荐
caihuayuan51 小时前
生产模式下react项目报错minified react error #130的问题
java·大数据·spring boot·后端·课程设计
一只码代码的章鱼1 小时前
Spring Boot- 2 (数万字入门教程 ):数据交互篇
spring boot·后端·交互
编程、小哥哥1 小时前
Java大厂面试:从Web框架到微服务技术的场景化提问与解析
java·spring boot·微服务·面试·技术栈·数据库设计·分布式系统
界面开发小八哥1 小时前
「Java EE开发指南」如何使用MyEclipse的可视化JSF编辑器设计JSP?(二)
java·ide·人工智能·java-ee·myeclipse
找不到、了3 小时前
Spring-Beans的生命周期的介绍
java·开发语言·spring
caihuayuan43 小时前
React Native 0.68 安装react-native-picker报错:找不到compile
java·大数据·sql·spring·课程设计
爱编程的鱼3 小时前
C#接口(Interface)全方位讲解:定义、特性、应用与实践
java·前端·c#
旋风菠萝4 小时前
深入理解Java中的Minor GC、Major GC和Full GC
java·jvm·gc
苹果酱05674 小时前
React方向:react脚手架的使用
java·vue.js·spring boot·mysql·课程设计
找不到、了4 小时前
JVM如何处理多线程内存抢占问题
java·jvm