# spring-security-study **Repository Path**: xiaopangit/spring-security-study ## Basic Information - **Project Name**: spring-security-study - **Description**: 本仓库用于记录 Spring Security 的学习笔记、示例代码与实战练习,涵盖认证、授权、OAuth2、JWT 等核心知识点,配套详细注释与学习心得。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-06-01 - **Last Updated**: 2026-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Security Study > 个人学习 Spring Security 的代码与笔记仓库,记录从入门到实战的完整过程。 --- ## 仓库简介 本仓库通过三个递进式 Demo,从零开始系统学习 Spring Security: - 理解 Spring Security 自动配置和 Filter Chain 机制 - 掌握表单登录、数据库认证、Remember-me 等基础特性 - 进阶到 JWT + Redis 无状态认证、前后端分离、RBAC 权限模型 - 覆盖全局异常处理、自定义 401/403 响应、CORS 等生产级实践 --- ## 目录结构 ``` app-springSecurity-study/ ├── pom.xml # 父 POM(聚合模块) │ ├── app01-springSecurity-init/ # ① 入门:Spring Security 初体验 │ └── src/main/java/com/ethan/ │ ├── App01SpringSecurityInitApplication.java │ └── controller/HelloController.java │ ├── app02-springSecurity-jwt/ # ② 进阶:JWT + Redis 无状态认证 │ ├── security.sql # 建表 + 测试数据 │ ├── README.md # 详细文档 + 接口测试 │ └── src/main/java/com/ethan/ │ ├── config/ # SecurityConfig, RedisConfig │ ├── controller/UserController.java # 登录/登出/用户信息/权限演示 │ ├── dto/LoginRequest.java │ ├── entity/ # User(implements UserDetails), Role │ ├── exception/GlobalExceptionHandler.java │ ├── filter/JwtAuthenticationTokenFilter.java │ ├── handler/ # 自定义 401/403 处理器 │ ├── mapper/UserMapper.java │ ├── service/impl/UserServiceImpl.java │ └── utils/ # JwtUtil, ResponseResult, SecurityUtils │ └── app03-Springsecurity-db-login/ # ③ 进阶:数据库表单登录 + RBAC └── src/main/java/com/ethan/ ├── config/SecurityConfig.java # 表单登录 + Remember-me + 权限控制 ├── controller/ # HelloController, UserController, │ # ProductController, SystemController ├── entity/ # User, Role ├── mapper/UserMapper.java ├── service/impl/UserServiceImpl.java └── resources/ ├── static/login.html # 自定义登录页 └── mapper/UserMapper.xml ``` --- ## 学习路线 ### ① app01 — Spring Security 入门 **目标**:理解 Spring Security 自动配置做了什么。 - 引入 `spring-boot-starter-security` 后发生了什么 - 默认的登录页面从哪来的(`DefaultLoginPageGeneratingFilter`) - 默认的用户名和密码在哪配 - `SecurityFilterChain` 的基本概念 ### ② app02 — JWT + Redis 无状态认证 **目标**:实现前后端分离架构下的无状态认证。 - JWT 签发与解析(jjwt 0.11.5) - Redis 存储登录态(`login:user:{username}`) - 自定义 `OncePerRequestFilter` 解析请求头中的 token - `DelegatingPasswordEncoder` 多编码兼容(`{noop}`、`{bcrypt}`) - `@EnableMethodSecurity` + `@PreAuthorize` 方法级权限控制 - 全局异常处理、自定义 401/403 JSON 响应 - CORS 跨域配置、登出、当前用户工具类 ### ③ app03 — 数据库表单登录 + RBAC **目标**:掌握传统 Session 模式下的认证授权。 - 自定义登录页面(`login.html`) - `UserDetailsService` 从 MySQL 加载用户 - `BCryptPasswordEncoder` 密码加密 - Remember-me 持久化令牌(`PersistentTokenRepository`) - URL 级权限控制(`hasRole` / `hasAuthority`) - 自定义 403 页面 - 退出登录 --- ## 核心知识点对照 | 知识点 | app01 | app02 | app03 | |--------|:-----:|:-----:|:-----:| | 自动配置与默认安全 | | | | | 自定义 SecurityFilterChain | | | | | 表单登录 formLogin | | | | | 数据库认证 UserDetailsService | | | | | 密码加密 PasswordEncoder | | | | | Remember-me | | | | | 自定义登录页 | | | | | JWT 无状态认证 | | | | | Redis 会话管理 | | | | | 自定义认证过滤器 | | | | | 方法级权限 @PreAuthorize | | | | | URL 级权限 hasRole/hasAuthority | | | | | 全局异常处理 | | | | | 自定义 401/403 处理器 | | | | | CORS 跨域 | | | | | 统一响应格式 | | | | | DelegatingPasswordEncoder | | | | --- ## 环境要求 - Java 17+ - Spring Boot 3.5.14 - Spring Security 6.5.10 - MySQL 8.x(app02、app03) - Redis(app02) - Maven --- ## 快速开始 每个子项目可独立运行: ```bash # app01 — 最简单的入门 cd app01-springSecurity-init mvn spring-boot:run # 访问 http://localhost:8080/hello → 自动跳转登录页 # app02 — JWT + Redis 无状态认证 cd app02-springSecurity-jwt mysql -u root -p < security.sql # 初始化数据库 mvn spring-boot:run # 参考 app02/README.md 中的接口测试 # app03 — 数据库表单登录 cd app03-Springsecurity-db-login mvn spring-boot:run # 访问 http://localhost:8080/login.html ``` --- ## 学习进度 - [x] 环境搭建与入门示例(app01) - [x] 表单登录与数据库认证(app03) - [x] 权限控制与 RBAC 实现(app02、app03) - [x] JWT 无状态认证(app02) - [x] Redis 会话管理(app02) - [x] 前后端分离实践(app02) - [x] 全局异常处理(app02) - [x] 自定义 401/403 响应(app02) - [ ] OAuth2 第三方登录 - [ ] 微服务网关集成 --- ## 个人说明 本仓库为个人学习使用,每个 Demo 均附带详细注释和 README 文档,记录学习中的关键点和踩坑过程。代码从简单到复杂递进,适合跟着一步步理解 Spring Security 的核心机制。