1.1 Spring Security 概述

news2025/2/11 15:35:17

Spring Security 概述


1. 什么是 Spring Security?

Spring Security 是 Spring 生态中专注于应用安全的核心框架,为 Java 企业应用提供认证(Authentication)、授权(Authorization)以及安全攻击防护(如 CSRF、会话固定攻击等)的完整解决方案。

  • 核心目标
    • 确保合法用户能够访问其权限范围内的资源。
    • 防止未授权用户或恶意请求对系统造成破坏。
  • 适用场景
    • 传统 Web 应用(Servlet 容器)
    • RESTful API 服务
    • 前后端分离架构
    • 企业级单点登录(SSO)

2. 核心功能
  1. 认证(Authentication)

    • 验证用户身份:确认用户是谁(如用户名密码、证书、生物识别等)。
    • 支持多种认证方式
      • 表单登录(Form Login)
      • HTTP Basic/Digest 认证
      • OAuth2、JWT、SAML
      • LDAP、数据库认证
  2. 授权(Authorization)

    • 控制资源访问权限:确定用户是否有权执行某个操作或访问某个资源。
    • 粒度控制方式
      • URL 路径级别(如 /admin/** 仅允许管理员访问)
      • 方法级别(通过注解控制 Service 或 Controller 方法)
      • 数据级别(动态过滤返回数据)
  3. 安全防护

    • 防御常见攻击
      • CSRF(跨站请求伪造)
      • CORS(跨域资源共享策略)
      • 会话固定(Session Fixation)
      • 点击劫持(X-Frame-Options)
    • 安全头部(Security Headers):自动添加安全响应头(如 X-Content-Type-OptionsContent-Security-Policy)。
  4. 扩展性

    • 支持通过自定义组件(如 UserDetailsServiceAuthenticationProvider)灵活适配业务需求。
    • 集成第三方认证协议(如 OAuth2、OpenID Connect)。

3. 核心组件
  1. SecurityFilterChain

    • 作用:定义 HTTP 请求的安全处理流程,通过一系列过滤器(Filter)实现安全控制。
    • 关键过滤器
      • UsernamePasswordAuthenticationFilter:处理表单登录。
      • BasicAuthenticationFilter:处理 HTTP Basic 认证。
      • AuthorizationFilter:校验请求权限。
  2. UserDetailsService

    • 作用:加载用户详细信息(如用户名、密码、权限)。
    • 实现方式:可自定义(如从数据库、LDAP 或外部服务加载用户数据)。
  3. AuthenticationManager

    • 作用:协调认证过程,委托给具体的 AuthenticationProvider 实现认证逻辑。
    • 默认实现ProviderManager
  4. AccessDecisionManager

    • 作用:决定用户是否有权限访问资源,基于投票机制(如 AffirmativeBasedConsensusBased)。
  5. PasswordEncoder

    • 作用:加密用户密码,防止密码明文存储。
    • 常用实现BCryptPasswordEncoderPbkdf2PasswordEncoder

4. 架构设计

Spring Security 基于 过滤器链(Filter Chain) 模型,所有 HTTP 请求需经过一系列安全过滤器处理:

  1. 请求流程

    • 客户端请求 → Servlet 容器 → DelegatingFilterProxy(入口) → FilterChainProxy(Spring Security 核心) → 具体过滤器链 → 业务逻辑。
  2. 认证与授权流程

    • 认证阶段:提取用户凭证(如用户名密码)并验证,生成 Authentication 对象。
    • 授权阶段:根据用户权限与资源规则(如 URL、方法注解)进行匹配,决定是否放行。
  3. 上下文存储

    • 认证结果存储在 SecurityContextHolder 中,默认基于 ThreadLocal 实现线程隔离。

5. 配置方式
  1. XML 配置(传统方式)

    • 通过 <http><authentication-manager> 等标签定义安全规则。
    • 示例:
      <http auto-config="true">
          <intercept-url pattern="/admin/**" access="ROLE_ADMIN" />
          <form-login login-page="/login" />
      </http>
      
  2. Java 配置(现代方式)

    • 通过 @Configuration 类继承 WebSecurityConfigurerAdapter(旧版本)或直接配置 SecurityFilterChain(新版本)。
    • 示例:
      @Configuration
      @EnableWebSecurity
      public class SecurityConfig {
          @Bean
          public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
              http
                  .authorizeHttpRequests(authorize -> authorize
                      .requestMatchers("/admin/**").hasRole("ADMIN")
                  )
                  .formLogin(form -> form.loginPage("/login"));
              return http.build();
          }
      }
      

6. 与其他模块的关系
  1. Spring MVC

    • 集成在 Servlet 容器中,通过 DispatcherServlet 处理请求,与 Spring Security 过滤器链协作。
  2. Spring Data

    • 通过 UserDetailsService 实现从数据库加载用户信息(如结合 JPA 或 JDBC)。
  3. Spring LDAP

    • 支持企业级 LDAP 认证集成。

7. 优势与适用性
  • 优势
    • 标准化:提供安全领域的通用解决方案,减少重复开发。
    • 灵活性:支持深度定制,适应复杂业务场景。
    • 社区支持:Spring 生态的官方维护,文档和社区资源丰富。
  • 适用场景
    • 需要精细化权限控制的企业级应用。
    • 需要集成多种认证协议的系统(如 OAuth2、SAML)。
    • 对安全性要求较高的金融、政务等领域。

通过本章节,你可以理解 Spring Security 的核心定位、功能模块及其在企业应用中的关键作用。接下来的学习将深入认证、授权及高级配置的实现细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kotlin协程详解——协程上下文

目录 一、上下文结构 get()获取元素 minusKey()删除元素 fold()元素遍历 plus()添加元素 CombinedContext Key 二、协程名称CoroutineName 三、上下文组合 四、协程作用域CoroutineScope 五、典型用例 协程的上下文&#xff0c;它包含用户定义的一些数据集合&#x…

手写一个C++ Android Binder服务及源码分析

手写一个C Android Binder服务及源码分析 前言一、 基于C语言编写Android Binder跨进程通信Demo总结及改进二、C语言编写自己的Binder服务Demo1. binder服务demo功能介绍2. binder服务demo代码结构图3. binder服务demo代码实现3.1 IHelloService.h代码实现3.2 BnHelloService.c…

Deep Dive into LLMs like ChatGPT - by Andrej Karpathy

https://www.youtube.com/watch?v7xTGNNLPyMIhttps://www.youtube.com/watch?v7xTGNNLPyMIDeep Dive into LLMs like ChatGPT - by Andrej Karpathy_哔哩哔哩_bilibilihttps://www.youtube.com/watch?v7xTGNNLPyMI转载自Andrej Karpathy Youtube ChannelThis is a general a…

react实例与总结(一)

目录 一、简单认识 1.1、特点 1.2、JSX语法规则 1.3、函数组件和类式组件 1.4、类组件三大属性state、props、refs 1.4.1、state 1.4.2、props 1.4.3、refs 1.5、事件处理 1.6、收集表单数据—非受控组件和受控组件 1.7、高阶函数—函数柯里化 1.8、生命周期—新旧…

51单片机(国信长天)矩阵键盘的基本操作

在CT107D单片机综合训练平台上&#xff0c;首先将J5处的跳帽接到1~2引脚&#xff0c;使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中&#xff0c;发现有按键触发信号后(不做去抖动)&#xff0c;待按键松开后&#xff0c;在数码管的第一位显示相应的数字:从左至右&…

STM32 RTC亚秒

rtc时钟功能实现&#xff1a;rtc模块在stm32内部&#xff0c;由电池或者主电源供电。如下图&#xff0c;需注意实现时仅需设置一次初始化。 1、stm32cubemx 代码生成界面设置&#xff0c;仅需开启时钟源和激活日历功能。 2、生成的代码,需要对时钟进行初始化&#xff0c;仅需…

【Linux】深入理解linux权限

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …

json格式,curl命令,及轻量化处理工具

一. JSON格式 JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式。它基于一个子集的JavaScript编程语言&#xff0c;使用人类易于阅读的文本格式来存储和表示数据。尽管名字中有“JavaScript”&#xff0c;但JSON是语言无关的&#xff0c;几…

web直播弹幕抓取分析 signature

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言 最近遇到太多难点了卡了很久&am…

ABP框架9——自定义拦截器的实现与使用

一、AOP编程 AOP定义:面向切片编程&#xff0c;着重强调功能&#xff0c;将功能从业务逻辑分离出来。AOP使用场景&#xff1a;处理通用的、与业务逻辑无关的功能&#xff08;如日志记录、性能监控、事务管理等&#xff09;拦截器:拦截方法调用并添加额外的行为&#xff0c;比如…

CUDA 计算平台 CUDA 兼容性【笔记】

在 b 站看过的两个关于 CUDA 的技术分享&#xff0c;整理分享下对自己有用的课件。 20231130 2023第9期 聊一聊常见的AI计算平台库_哔哩哔哩_bilibili20230831 2023第6期 聊一聊CUDA兼容性_哔哩哔哩_bilibili 文章目录 CUDA 计算平台CUDA 函数库介绍英伟达三大护城河&#xff1…

最新消息 | 德思特荣获中国创新创业大赛暨广州科技创新创业大赛三等奖!

2024年12月30日&#xff0c;广州市科技局公开第十三届中国创新创业大赛&#xff08;广东广州赛区&#xff09;暨2024年广州科技创新创业大赛决赛成绩及拟获奖企业名单&#xff0c;德思特获得了智能与新能源汽车初创组【第六名】【三等奖】的好成绩&#xff01; 关于德思特&…

ubuntu安装VMware报错/dev/vmmon加载失败

ubuntu安装VMware报错/dev/vmmon加载失败&#xff0c;解决步骤如下&#xff1a; step1&#xff1a;为vmmon和vmnet组件生成密钥对 openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CNVMware/"ste…

python的列表、元组、深拷贝、浅拷贝(四)

python的列表 一、序列1. 序列定义2. 序列数据类型包括3.特点&#xff1a;都支持下面的特性 二、 列表1. 列表的创建2. 列表的基本特性(1) 连接操作符喝重复操作符(2) 成员操作符&#xff08;in , not in &#xff09;(3) 索引(4) 切片练习(5) for循环 3. 列表的常用方法(1) 一…

2.10作业

思维导图 C C语言

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE&#xff08;Multi-gate Mixture-of-Experts&#xff0c;多门混合专家网络&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决 1、报错情况 下载&#xff1a;https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开&#xff0c;启动&#xff1a; 日志有报错&#xff1a; 点右侧m图标&#xff0c;maven有以下报误 &…

C# OpenCV机器视觉:对位贴合

在热闹非凡的手机维修街上&#xff0c;阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭&#xff0c;不是膜的边缘贴不整齐&#xff0c;就是里面充满了气泡&#xff0c;阿强心里就想&#xff1a;“要是我能有个自动贴膜的神器&#xff0c;那该多好啊&#xf…

Baumer工业相机堡盟相机的相机传感器芯片清洁指南

Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3&#xff0e;使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…

《我在技术交流群算命》(三):QML的Button为什么有个蓝框去不掉啊(QtQuick.Controls由Qt5升级到Qt6的异常)

有群友抛出类似以下代码和运行效果截图&#xff1a; import QtQuick import QtQuick.ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Button{anchors.centerIn: parentwidth: 100height: 40background: Rectangle {color: "red…