1. 前言在上一章节中,我们讲解了Spring Security基于内存的用户认证,也提到了实际开发生产中更多使用的还是基于数据库的动态用户认证,因为在企业应用中,用户、角色、权限管理通常都存储在数据库中。
本章节博主将带着大家以MySQL数据库为例,从用户(sys_user)、角色(sys_role)、用户角色(sys_user_role)、系统菜单资源(sys_menu)、角色菜单(sys_role_menu)表出发,演示如何使用Spring Security动态加载用户信息、角色,实现基于数据库的RBAC角色模型认证。
2. 数据库表结构说明本文示例基于整理的MySQL表结构,其中主要表结构如下(大家可以根据自己的业务需求进行扩展):
sys_user:存储用户信息,字段包括user_id、login_name、password等
sys_role:存储角色信息,字段包括role_id、role_name(角色名称)、role_key(角色标识)等
sys_user_role:关联用户和角色的中间表
sys_menu:系统菜单资源表,字段包括menu_id、menu_name( ...
1. 前言今天博主又抽空来给小伙伴们更新Spring Security教程啦!上个章节中我们讲解了如何通过数据库实现基于数据库的动态用户认证。大家可能发现了,项目中是基于RBAC角色模型的权限控制,虽然能满足大多数场景,但在面对复杂、细粒度的权限需求时可能会力不从心。基于属性的访问控制(ABAC)模型则通过评估用户、资源、环境等多种属性,实现更加灵活的权限控制。
例如,某个菜单的访问可能不仅取决于用户角色,还取决于用户的部门、时间或其他属性。因此,需要在权限验证时动态获取这些属性并进行评估。那么本章节我们就来讲解基于数据库的ABAC属性权限模型实战开发。
2. 权限决策依据既然谈到了RBAC和ABAC两个模型,就给大家介绍下两者间的区别:
RBAC
核心思想:以角色作为权限管理的核心,每个用户被赋予一个或多个角色,而角色与权限之间存在固定的映射关系。
决策依据:当用户请求访问资源时,系统根据用户所属角色所拥有的权限进行校验。
粒度:粒度相对较粗,因为权限是绑定在角色上的,无法针对单个请求条件进行动态决策。
ABAC
核心思想:以属性(Attribute)为基础,利用用户属性、资源属 ...
1. 前言在我们日常开发的后台系统中,”Remember-Me“(记住我)功能是一种常见的安全增强机制,允许用户在关闭浏览器后仍然保持登录状态,而无需重新输入用户名和密码。Spring Security提供了多种Remember-Me方案,最常用的是基于哈希的Token方案和持久化令牌方案。
本章节博主将详细讲解这两种方案的实现,带大家快速入门!在实际开发中,小伙伴们可根据各自需求进行改造。
2. Remember-Me机制概述在Spring Security中,Remember-Me的核心作用是在会话失效后依然允许用户自动登录。其基本工作流程(以更常用的持久化令牌方案为例)如下:
用户登录成功后,如果勾选了”记住我”,服务器会创建一个Remember-Me Token,并存储在客户端的Cookie中。
当用户的会话失效后,系统会检查Cookie是否存在并有效:
如果有效,则自动完成登录;
如果无效或过期,则用户需要重新认证。
Spring Security主要提供两种Remember-Me方案:
方案
实现类
特点
基于Token(默认方案)
TokenBas ...
最新Spring Security实战教程(三):Spring Security的底层原理解析1. 前言相信通过前面两个章节的讲解,大家已经对Spring Security有了一个初步认识。今天这个章节我们主要聊一聊Spring Security的底层原理。为什么我们只要简单的一个配置就可以实现想要的功能?实际上Spring Security的Servlet支持就是基于Servlet过滤器Filter!
官方文档参考:https://docs.spring.io/spring-security/reference/servlet/architecture.html
回顾过滤器Filter以下引入官方文档的示例图来回顾一下单个HTTP请求的处理程序的典型分层:
开发者可以在每个Filter过滤器中对请求进行修改或增强。
委托过滤代理DelegatingFilterProxySpring提供了一个名为DelegatingFilterProxy的Filter实现,它可以在Servlet容器和Spring容器之间建立桥梁:
为什么需要一个桥梁?因为Servlet容器并不知道Spring容器 ...
1. 前言在微服务与分布式架构日益普及的今天,传统的单一凭证(用户名+密码) 已经难以满足企业对于身份验证的高安全性需求。多因素认证(Multi‑Factor Authentication,简称 MFA) 通过“用户知道的东西”(如密码)+“用户拥有的东西”(如动态验证码)或“用户自身的一部分”(如指纹)三种因素的组合,大幅提升了系统防护能力。
企业级安全方案设计 - 多因素认证(MFA)实现-1.png)
比如我们常见的 GitHub、腾讯云等就开启了 MFA。GitHub 开启 MFA 后可以使用 Authenticator 应用扫描,而腾讯云则需要短信验证码来进行校验。
本章节笔者将带领大家深入解析 MFA,并基于 Spring Security 6,结合 MySQL 与 MyBatis-Plus,从理论到实战,快速构建一套企业级的 MFA 认证方案。
2. 为什 ...
1. 前言在前面学习的章节中,相信大家一定看过一个配置.csrf()。回忆一下之前使用Spring Security默认页登录的时候,该配置Spring Security默认开启,主要用于CSRF防护。如果你现在还不了解什么是CSRF防护,没关系,通过本章节,博主带着大家一起深入学习这个知识点~
2. CSRF攻击原理跨站请求伪造(CSRF)是一种利用受信任用户的身份,诱使用户在已登录的应用中执行非预期操作的攻击手段。
当用户在某个站点(如银行)登录并持有有效Session Cookie后,攻击者可通过精心构造的请求(例如隐藏在图片或表单中的POST请求)在用户不知情的情况下向该站点发起请求,并携带用户的Cookie,从而完成诸如转账、修改邮箱等敏感操作。
2.1 攻击原理图解
用户访问了A站点,获得了Session或Cookie后,用户不经意间访问到了恶意网站,此刻恶意网站伪造对A站点的危险请求
2.2 攻击示例下面示例展示了一个最常见的CSRF攻击场景:用户登录了https://bank.com后,攻击者在自己的网站https://evil.com上放置如下HTML片段:
1 ...
1. 前言在 Web 应用安全体系中,会话管理是认证授权后的重要防线。攻击者常通过会话劫持与会话固定突破系统边界,而业务系统则面临并发滥用带来的资源风险。
Spring Security 的会话管理模块由 SessionManagementFilter 与一系列 SessionAuthenticationStrategy 共同协作,负责在用户登录或访问受保护资源时执行统一的会话检查与策略。默认情况下,框架允许单个用户拥有无限多个并发会话,而在每次登录时会执行会话固定保护策略,将旧 Session ID 迁移到新 Session 中,以防止攻击者利用已有的 Session ID 进行劫持。
在本章节,笔者将基于 Spring Security 6,深入解析会话管理的安全实践。
2. 会话固定攻击防护原理2.1 攻击概述会话固定(Session Fixation)指攻击者诱导受害者在已知的 Session ID 下登录,随后持该 ID 进行未授权操作。Spring Security 通过会话固定保护策略,在每次用户登录后刷新 Session ID 来防御此类攻击。
攻击流程解析
2.2 ...
1. 前言在日常开发中,跨域资源共享(CORS)已成为前端与后端分离架构的必备能力。正确配置 CORS 是后端安全边界的重要一环。但安全与便利的天平往往难以把握——过于宽松的配置可能导致敏感数据泄露,过于严格的策略又会影响正常业务交互。本文我们继续《Spring Security 实战教程》,讲解 CORS 安全配置。
2. 背景与原理概述跨域请求是指浏览器在一个域(Origin A)加载的脚本访问另一个域(Origin B)的资源。为保护用户数据,浏览器默认禁止跨域访问,除非服务器在响应头中明确允许。CORS 机制通过 Access-Control-Allow-* 系列头部,告诉浏览器何种跨域请求被允许,从而实现安全的跨域通信。
2.1 预检请求全流程当发起“简单请求”时(如 GET/POST 且只有简单头部),浏览器会直接带上 Cookie 等凭证;对复杂请求(如 PUT/DELETE、携带自定义头部)则先发起一次预检(OPTIONS)请求,确认服务器同意后才发送实际请求。
2.2 关键响应头说明Access-Control-Allow-* 响应头主要包括以下几个:
响应头 ...
1. 前言在微服务与前后端分离架构中,第三方社交登录已成为提升用户体验的重要功能。社交登录可以有效降低用户注册成本,同时利用第三方平台的账号体系,实现快速认证与信息获取。Spring Security 6 作为 Java 生态中的安全框架,通过 OAuth2 协议简化了第三方认证的集成流程。
本章节笔者将通过完整代码案例,讲解如何基于 Spring Security 6 实现 GitHub 和 Gitee 的社交登录功能。
2. 原理分析回顾上一章节介绍的 OAuth 2.0 授权码流程(最新 Spring Security 实战教程(十四)OAuth2.0 精讲 - 四种授权模式与资源服务器搭建):
其主要流程包括:
跳转授权:客户端(我们的网站)将用户重定向至第三方授权服务器的授权端点,携带 client_id、redirect_uri、scope 等参数。
用户登录并同意:用户在第三方平台完成登录后,同意授权给客户端指定权限。
回调获取授权码:授权服务器重定向回客户端注册的 redirect_uri,并在查询参数中附带 code。
交换令牌:客户端后端使用 code、clie ...
1. 前言在我们日常开发系统的安全架构中,仅仅通过认证和授权往往不足以满足合规、溯源、风险预警等需求。企业级系统必须记录并分析 “谁在什么时候对什么资源做了什么操作”,并结合规则引擎识别异常行为,及时告警。
安全审计作为企业防护的最后一道防线,能有效追踪异常行为、还原攻击链、满足合规要求。本文笔者将带领大家基于 Spring Security 构建完整的安全审计系统,实现关键操作追踪与实时风险预警。
2. Spring Security 审计架构设计2.1 系统架构我们常见的安全审计应该具备以下基础:以笔者目前所在公司使用的系统架构如下图:
2.2 审计日志四要素
要素
说明
示例
主体
操作执行者
用户 ID、IP 地址
客体
被操作对象
数据 ID、接口路径
动作
操作类型
登录、删除、授权变更
环境
操作上下文
时间、设备、地理位置
2.3 技术栈选择
事件采集:Spring AOP + ApplicationEvent
存储方案:MySQL + MyBatis‑Plus(中小型应用适用)或 Elasticsearch + Logstash(大型应用 ...

