# spring-security-demo **Repository Path**: it4/spring-security-demo ## Basic Information - **Project Name**: spring-security-demo - **Description**: 简单的一个基于RBAC的权限管理demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-31 - **Last Updated**: 2025-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: spring-security ## README # Spring Security JWT Demo 一个基于Spring Boot和Spring Security的JWT认证示例项目,演示了如何实现无状态的RESTful API安全认证。 ## 项目概述 本项目演示了现代Web应用中的安全认证实现,采用JWT(JSON Web Token)和Redis相结合的方式,实现了用户登录、权限控制、会话管理等功能。 ## 技术栈 - Spring Boot 3.x - Spring Security 6.x - JWT (java-jwt) - Redis - MyBatis - Hutool - Lombok ## 功能特性 ### 1. 用户认证 - 基于用户名和密码的认证 - JWT令牌生成和验证 - Redis会话管理 ### 2. 权限控制 - 基于角色的访问控制(RBAC) - 方法级别权限注解(@PreAuthorize) - URL级别权限配置 ### 3. 安全特性 - BCrypt密码加密 - 无状态会话管理 - CSRF防护禁用(适用于API) - 自定义异常处理 ## 核心组件 ### 1. 安全配置 (SecurityConfig) ```java @Configuration @EnableMethodSecurity(securedEnabled = true) public class SecurityConfig { // 配置密码编码器、认证管理器、过滤器链等 } ``` ### 2. JWT工具类 (JwtUtils) - JWT令牌的生成、验证和解析 - 使用HMAC256算法签名 ### 3. 自定义过滤器 (JwtAuthenticationTokenFilter) - 拦截请求并验证JWT令牌 - 从Redis中获取用户信息 - 设置Spring Security上下文 ### 4. 用户详情服务 (LoginUserDetails) - 实现UserDetails接口 - 封装用户认证信息 ## API接口 ### 认证相关 ``` POST /user/login - 用户登录 ``` ### 测试接口 ``` GET /test/test1 - 匿名访问 GET /test/test2 - 需要认证 GET /test/test3 - 需要admin角色 ``` ## 配置说明 ### application.yml ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/security_demo username: root password: password redis: host: localhost port: 6379 ``` ## 部署说明 ### 环境要求 - Java 17+ - MySQL 8.0+ - Redis 6.0+ ### 运行步骤 1. 克隆项目 2. 配置数据库和Redis连接 3. 运行Spring Boot应用 4. 访问API接口 ## 安全设计 ### 1. 认证流程 ``` 1. 用户提交登录请求 2. 验证用户名密码 3. 生成JWT令牌 4. 存储用户信息到Redis 5. 返回令牌给客户端 ``` ### 2. 请求验证流程 ``` 1. 客户端携带JWT令牌 2. JwtAuthenticationTokenFilter拦截请求 3. 验证令牌有效性 4. 从Redis获取用户信息 5. 设置安全上下文 ``` ### 3. 会话管理 - 使用Redis存储用户会话信息 - 支持令牌注销和会话清理 - 可配置的令牌过期时间 ## 异常处理 ### 全局异常处理器 - 认证异常处理 - 权限拒绝处理 - 自定义安全异常处理 ### 常见异常 - `BadCredentialsException` - 用户名密码错误 - `AuthorizationDeniedException` - 权限不足 - `AccessDeniedException` - 访问拒绝 ## 扩展建议 ### 1. 生产环境优化 - 添加HTTPS支持 - 实现令牌刷新机制 - 添加更细粒度的权限控制 - 集成OAuth2/OpenID Connect ### 2. 安全增强 - 添加请求频率限制 - 实现双因素认证 - 添加审计日志 - 实现密码复杂度策略 ## 项目结构 ``` src/main/java/com/okcl ├── controller/ # 控制器层 ├── dto/ # 数据传输对象 ├── entity/ # 实体类 ├── handler/ # 异常处理器 ├── mapper/ # 数据访问层 ├── security/ # 安全配置和组件 ├── service/ # 业务逻辑层 └── utils/ # 工具类 ``` ## 贡献指南 1. Fork项目 2. 创建功能分支 3. 提交更改 4. 发起Pull Request ## 许可证 MIT License ## 联系方式 如有问题,请提交Issue或联系项目维护者。