SpringSecurity实战教程(五)基于数据库的动态用户认证:传统RBAC角色模型实战开发
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_na...
SpringSecurity实战教程(八)Remember-Me实现原理:持久化令牌与安全存储方案
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(默认方案) Token...
SpringSecurity实战教程(六)基于数据库的ABAC属性权限模型实战开发
1. 前言今天博主又抽空来给小伙伴们更新Spring Security教程啦!上个章节中我们讲解了如何通过数据库实现基于数据库的动态用户认证。大家可能发现了,项目中是基于RBAC角色模型的权限控制,虽然能满足大多数场景,但在面对复杂、细粒度的权限需求时可能会力不从心。基于属性的访问控制(ABAC)模型则通过评估用户、资源、环境等多种属性,实现更加灵活的权限控制。 例如,某个菜单的访问可能不仅取决于用户角色,还取决于用户的部门、时间或其他属性。因此,需要在权限验证时动态获取这些属性并进行评估。那么本章节我们就来讲解基于数据库的ABAC属性权限模型实战开发。 2. 权限决策依据既然谈到了RBAC和ABAC两个模型,就给大家介绍下两者间的区别: RBAC 核心思想:以角色作为权限管理的核心,每个用户被赋予一个或多个角色,而角色与权限之间存在固定的映射关系。 决策依据:当用户请求访问资源时,系统根据用户所属角色所拥有的权限进行校验。 粒度:粒度相对较粗,因为权限是绑定在角色上的,无法针对单个请求条件进行动态决策。 ABAC 核心思想:以属性(Attribute)为基础,利用用户属性、...
SpringSecurity实战教程(十一)CSRF攻防实战
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片段...
SpringSecurity实战教程(十三)会话管理机制 - 并发控制与会话固定攻击防护
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...
SpringSecurity实战教程(十七)企业级安全方案设计 - 多因素认证(MFA)实现
1. 前言在微服务与分布式架构日益普及的今天,传统的单一凭证(用户名+密码) 已经难以满足企业对于身份验证的高安全性需求。多因素认证(Multi‑Factor Authentication,简称 MFA) 通过“用户知道的东西”(如密码)+“用户拥有的东西”(如动态验证码)或“用户自身的一部分”(如指纹)三种因素的组合,大幅提升了系统防护能力。 企业级安全方案设计 - 多因素认证(MFA)实现-1.png) 比如我们常见的 GitHub、腾讯云等就开启了 MFA。GitHub 开启 MFA 后可以使用 Authenticator 应用扫描,而腾讯云则需要短信验证码来进行校验。 本章节笔者将带领大家深入解析 MFA,并基于 Spring Security 6,结合 MySQL 与 MyBatis-Plus,从理论到实战,快速构建一套企业级的 MFA 认证方案。 2....
SpringSecurity实战教程(十五)快速集成 GitHub 与 Gitee 的社交登录
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、c...
SpringSecurity实战教程(十八)安全日志与审计:关键操作追踪与风险预警
1. 前言在我们日常开发系统的安全架构中,仅仅通过认证和授权往往不足以满足合规、溯源、风险预警等需求。企业级系统必须记录并分析 “谁在什么时候对什么资源做了什么操作”,并结合规则引擎识别异常行为,及时告警。 安全审计作为企业防护的最后一道防线,能有效追踪异常行为、还原攻击链、满足合规要求。本文笔者将带领大家基于 Spring Security 构建完整的安全审计系统,实现关键操作追踪与实时风险预警。 2. Spring Security 审计架构设计2.1 系统架构我们常见的安全审计应该具备以下基础:以笔者目前所在公司使用的系统架构如下图: 2.2 审计日志四要素 要素 说明 示例 主体 操作执行者 用户 ID、IP 地址 客体 被操作对象 数据 ID、接口路径 动作 操作类型 登录、删除、授权变更 环境 操作上下文 时间、设备、地理位置 2.3 技术栈选择 事件采集:Spring AOP + ApplicationEvent 存储方案:MySQL + MyBatis‑Plus(中小型应用适用)或 Elasticsearch + Logstash(大型...
SpringSecurity实战教程(十四)OAuth2.0 精讲 - 四种授权模式与资源服务器搭建
1. 前言(OAuth2 简介)目前 OAuth2.0 已成为现代应用认证授权的标准,从单点登录到微服务架构都依赖其构建安全通道。我们常见的微信、QQ、微博等应用均有使用。OAuth 2.0(Open Authorization)是一种开放的授权框架,允许应用在不暴露用户密码的前提下,安全地代表用户访问第三方服务上的受保护资源。 本章节,笔者将带领大家深入解析四种核心授权模式,并基于 Spring Security 6 手把手搭建安全的资源服务器,助您掌握分布式系统的认证精髓。 注:部分介绍参考了官方文档:https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html,小伙伴们可自行阅读并查阅官方示例代码。 2. OAuth2 的角色根据 RFC 6749 标准,OAuth 2.0 定义了四种角色,每个角色在授权流程中承担不同职责: 资源所有者(Resource Owner):通常是终端用户,拥有受保护资源。 客户端(Client):向用户请求授权,代表用户访问资源的应用,通常是一个 W...
SpringSecurity实战教程(四)基于内存的用户认证
1. 前言又是新的一周,博主继续来给大家更新Spring Security实战教程。在上一个章节中我们详细介绍了Spring Security的底层原理,本章节博主将带着大家介绍如何在Spring Security中实现基于内存的用户认证。 虽然Spring Security基于内存的用户认证在实际开发中相对来说用得比较少,但在某些场景下(如:开发阶段、原型验证、演示环境搭建、单元测试/集成测试,或甚至不需要数据库的简单系统),基于内存的用户认证方式就足以满足需求。为了应对这样的需求,博主觉得还是有必要聊一聊基于内存的用户认证。 2. 为何选择内存认证?就如前面说的场景,总结内存认证主要有以下几个优点: 简单快捷:配置简单,不需要依赖数据库或外部存储,适用于快速构建和测试。 易于调试:所有用户信息存储在代码中,方便开发过程中快速定位问题。 适用于小型应用:对于用户数量较少的应用或者临时验证原型,内存认证是个不错的选择。 当然,内存认证也有局限性:用户数据不持久化、无法扩展到分布式系统等。因此,在生产环境中,通常会采用基于数据库或其他外部认证机制的方式。 与数据库...