相关推荐recommended
Spring Security 6.x 系列【1】基础篇之概述及入门案例
作者:mmseoamin日期:2024-02-20

有道无术,术尚可求,有术无道,止于术。

本系列Spring Boot 版本 3.0.4

本系列Spring Security 版本 6.0.2

源码地址:https://gitee.com/pearl-organization/study-spring-security-demo

文章目录

    • 导读
    • 安全框架
    • Spring Security
      • 概述
      • 发展历史
      • 入门案例
        • 1. 创建工程
        • 2. 运行
        • 3. 测试

          导读

          本系列基于最新Spring Boot 3.0 + Spring Security 6.0版本,由浅入深,从实战到源码分析,详细讲解各种 Spring Security 的使用技巧,适用于初学和进阶使用者。

          本系列学习路线:

          Spring Security 6.x 系列【1】基础篇之概述及入门案例,在这里插入图片描述,第1张

          安全框架

          开发软件系统时,Web 安全非常重要,JAVA安全框架,大家听得最多的应该是Spring Security 、Apache Shiro。国产的有Sa-Token。

          这些框架底层的原理都大同小异,只要学会一个,其他的上手就非常容易👊👊👊

          一个功能完善的安全框架,一般需要支持以下特性:

          • 认证(Authentication):验证用户的身份
          • 授权(Authorization):验证用户的访问和权限,对已认证用户进行访问控制
          • 加密:对重要信息进行加密处理,比如密码加密
          • 会话管理:对用户认证、会话信息进行存储管理
          • 防御攻击:对常见的网络攻击进行防御

            Spring Security

            GitHub地址

            官方文档地址

            Spring Security 6.0提供了许多新功能,并且需要JDK 17。

            概述

            Spring Security 是Spring 组织提供的一个开源安全框架,目前最新的版本为6.0.2,基于Spring 开发,所以非常适合在Spring Boot中使用。

            Spring Security提供认证、授权、抵御常见攻击等功能,将认证与授权分离,并提供了扩展点。对保护命令式(Spring MVC)和响应式(Spring Webfulx)应用程序有一流的支持,是保护基于Spring开发的应用程序的事实标准。

            认证:Spring Security 为身份验证提供了全面的支持,身份验证是验证进行访问的主体身份。常用方法是要求用户输入用户名和密码。一旦执行身份验证,就知道身份并可以执行授权。

            授权:授权指的是验证某个用户是否有权限执行某个操作。在系统中不同用户所具有的权限是不同的。比如对某条数据来说,有的用户只能进行读取,而有的用户可以进行修改。一般系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

            发展历史

            Spring 社区在成立后,2003年底开始考虑开发安全框架,最初是Acegi,大约一年后,Acegi Security成为Spring Framework的正式子项目。

            2006年5月Acegi Security发布了1.0版, 于2007年底更名为Spring Security。

            如今Spring Security拥有一个强大且活跃的开源社区,当前最新版本为6.0.2。

            入门案例

            1. 创建工程

            Spring Boot 3.0系列【3】基础篇之使用Spring Initializr快速创建项目

            使用Spring Initializr快速创建一个Spring Boot 3.0项目,可以直接选择引入Spring Security依赖:

            Spring Security 6.x 系列【1】基础篇之概述及入门案例,在这里插入图片描述,第2张

            POM依赖坐标如下所示:

                
                    
                        org.springframework.boot
                        spring-boot-starter-web
                    
                    
                        org.projectlombok
                        lombok
                        true
                    
                    
                        org.springframework.boot
                        spring-boot-starter-test
                        test
                    
                    
                    
                        org.springframework.boot
                        spring-boot-starter-security
                    
                
            

            spring-boot-starter-security是Spring Boot 官方提供的启动器,提供了自动配置和依赖包管理:

            Spring Security 6.x 系列【1】基础篇之概述及入门案例,在这里插入图片描述,第3张

            主要包含以下几个子模块:

            • spring-security-core: 核心包,包含核心认证和访问权限功能类和接口、远程支持和基本配置API
            • spring-security-web:WEB框架集成包,包含过滤器和相关的web安全基础设施代码
            • spring-security-config:包含 security 命名空间解析代码和Java配置代码

              2. 运行

              启动程序,UserDetailsServiceAutoConfiguration自动配置类,会生成一个默认随机登录密码(因为目前没有配置用户,配置后不会生成):

              Spring Security 6.x 系列【1】基础篇之概述及入门案例,在这里插入图片描述,第4张

              DefaultSecurityFilterChain默认的过滤器链会打印出所有的Filter过滤器:

              Spring Security 6.x 系列【1】基础篇之概述及入门案例,在这里插入图片描述,第5张

              3. 测试

              编写访问接口:

              @RestController
              public class TestController {
                  @GetMapping("/test")
                  public Object test() {
                      return "Hello Security";
                  }
              }
              

              访问测试接口,此时被重定向到默认登录页面:

              Spring Security 6.x 系列【1】基础篇之概述及入门案例,在这里插入图片描述,第6张

              用户名输入user,密码输入控制台生成的随机登录密码,登录成功后重定向到访问接口:

              Spring Security 6.x 系列【1】基础篇之概述及入门案例,在这里插入图片描述,第7张

              也可以在yml中配置一个默认的登录用户及密码:

              spring:
                security:
                  user:
                    name: test
                    password: 123456