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

相关推荐
workflower3 小时前
单元测试-例子
java·开发语言·算法·django·个人开发·结对编程
YuanlongWang3 小时前
C# 基础——装箱和拆箱
java·开发语言·c#
摇滚侠3 小时前
Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
spring boot·笔记·后端
b78gb3 小时前
电商秒杀系统设计 Java+MySQL实现高并发库存管理与订单处理
java·开发语言·mysql
wb043072014 小时前
性能优化实战:基于方法执行监控与AI调用链分析
java·人工智能·spring boot·语言模型·性能优化
天若有情6735 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
lichong9516 小时前
Android studio 修改包名
android·java·前端·ide·android studio·大前端·大前端++
lichong9516 小时前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++
@yanyu6666 小时前
Tomcat安装与HTML响应实战
java·tomcat·html
呼哧呼哧.6 小时前
Spring的核心思想与注解
数据库·sql·spring