# easyWeb **Repository Path**: lxj-creator/easy-web ## Basic Information - **Project Name**: easyWeb - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-11 - **Last Updated**: 2026-07-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyWeb 基于 Spring Boot 的多模块单体 Web 应用框架。 ## 项目结构 ``` EasyWeb/ ├── pom.xml # 父级 POM(统一管理依赖版本、插件) ├── easyweb-app/ # 应用主模块(Web 启动入口) │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/lxj/easy/ │ │ └── resources/ │ └── test/ ├── easyweb-security/ # 安全模块(Sa-Token + JWT 认证鉴权) │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/lxj/easy/security/ │ └── resources/ └── README.md ``` ### 模块说明 | 模块 | 说明 | | ---------------- | ------------------------------------------ | | `EasyWeb` | 父级模块,统一管理依赖版本和构建插件 | | `easyweb-app` | 应用主模块,Web 启动入口,包含业务代码 | | `easyweb-security` | 安全模块,Sa-Token + JWT 认证鉴权 | ### 添加新子模块 在根目录创建新模块目录,添加 `pom.xml` 继承父级: ```xml lxj.easy EasyWeb 1.0-SNAPSHOT easyweb-xxx ``` 然后在根 `pom.xml` 的 `` 中声明: ```xml easyweb-app easyweb-xxx ``` ## 环境要求 | 环境 | 版本 | 说明 | | -------- | -------- | ----------------------------------------- | | JDK | 1.8 | JAVA_HOME 需指向 JDK 1.8 路径 | | Maven | 3.6+ | 项目构建工具 | | MySQL | 8.x | 数据库 | ## 技术栈 | 技术 | 版本 | 说明 | | ------------------- | ---------- | ---------------------------- | | Spring Boot | 2.7.18 | 2.x 最终维护版,支持 JDK 8 | | MyBatis-Plus | 3.5.5 | 增强版 MyBatis | | Druid | 1.2.21 | 阿里巴巴数据库连接池 | | MySQL Connector/J | 8.0.33 | MySQL 8 驱动(父工程管理) | | Lombok | 1.18.30 | 简化实体类代码(全局共享) | | Hutool | 5.8.25 | Java 工具包 | | Jackson | 2.13.5 | JSON 序列化(父工程管理) | | Hibernate Validator | 6.2.x | 参数校验(父工程管理) | | Tomcat(内嵌) | 9.0.83 | Web 容器(父工程管理) | | Sa-Token | 1.39.0 | 轻量级权限认证框架 | | JJWT | 0.11.5 | JWT 生成与解析库 | ## 依赖说明 ### Spring Boot 核心 | 依赖 | 版本 | 说明 | | ----------------------------- | ------ | ------------ | | `spring-boot-starter-web` | 2.7.18 | Web 启动器 | | `spring-boot-starter-validation` | 2.7.18 | 参数校验 | ### 数据库相关 | 依赖 | 版本 | 说明 | | ----------------------------- | ------ | ------------------ | | `mysql-connector-j` | 8.0.33 | MySQL 8 驱动 | | `mybatis-plus-boot-starter` | 3.5.5 | MyBatis-Plus | | `druid-spring-boot-starter` | 1.2.21 | Druid 连接池 | ### 工具类 | 依赖 | 版本 | 说明 | | ----------------------- | ------ | -------------------------- | | `lombok` | 1.18.30| 简化代码(编译时排除打包) | | `hutool-all` | 5.8.25 | Hutool 全量工具包 | | `jackson-datatype-jsr310` | 2.13.5 | Java 8 日期时间支持 | ### 测试 | 依赖 | 版本 | 说明 | | ------------------------- | ------ | -------------------------- | | `spring-boot-starter-test`| 2.7.18 | JUnit 5、Mockito 等 | ## 构建插件 ### spring-boot-maven-plugin - 支持 `mvn spring-boot:run` 直接启动应用 - 支持 `mvn package` 打包为可执行 JAR - **Lombok 排除配置**:通过 `` 将 Lombok 从最终打包产物中排除,减小 JAR 体积 ```xml org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok ``` > Lombok 仅在编译期生效,运行时不需要,因此排除可减小最终产物体积。 ## 快速开始 ```bash # 编译所有模块 mvn clean compile # 运行应用主模块 mvn spring-boot:run -pl easyweb-app # 打包所有模块 mvn clean package -DskipTests # 仅打包应用模块 mvn clean package -pl easyweb-app -am -DskipTests ``` --- ## 安全架构 ### 方案选型 本项目采用 **Sa-Token + JWT** 组合方案: | 组件 | 职责 | |---|---| | **Sa-Token** | 认证鉴权框架,负责登录认证、权限校验、会话管理 | | **JWT** | Token 规范,将 Sa-Token 的 Token 替换为 JWT 格式,实现无状态认证 | ### 工作原理 #### 认证流程 ``` 客户端 服务端 │ │ │ 1. POST /api/auth/login │ │ {username, password} │ │ ───────────────────────────> │ │ │ │ 2. 验证用户名密码(查数据库) │ │ │ 3. StpUtil.login(userId) │ Sa-Token 生成 JWT Token │ │ │ 4. 返回 JWT Token │ │ <─────────────────────────── │ │ │ │ 5. 后续请求携带 Token │ │ Header: Authorization: Bearer xxx │ ───────────────────────────> │ │ │ │ 6. SaInterceptor 拦截 │ 解析 JWT Token │ 验证签名 + 提取用户信息 │ │ │ 7. 返回数据 │ │ <─────────────────────────── │ ``` #### Sa-Token 的三种 JWT 模式 | 模式 | 说明 | 适用场景 | |---|---|---| | **Simple**(当前采用) | Token 替换为 JWT,Session 仍存服务端 | 入门推荐,兼顾安全与性能 | | **Mix** | Token 为 JWT,Session 数据嵌入 Token | 无状态场景 | | **Stateless** | 完全无状态模式 | 微服务/分布式 | #### 核心组件说明 | 组件 | 文件 | 职责 | |---|---|---| | SaTokenConfig | `config/SaTokenConfig.java` | 注册 Sa-Token 拦截器,配置 JWT 模式 | | StpInterfaceImpl | `config/StpInterfaceImpl.java` | 加载用户权限/角色数据(需对接数据库) | | SaTokenExceptionHandler | `config/SaTokenExceptionHandler.java` | 统一处理认证鉴权异常 | ### 依赖关系 ``` easyweb-app(应用主模块) └── easyweb-security(安全模块) ├── sa-token-spring-boot-starter(Sa-Token 核心) ├── sa-token-jwt(Sa-Token JWT 整合) └── jjwt(JWT 生成与解析) ``` ### 配置说明 ```yaml sa-token: token-name: Authorization # Token 名称(HTTP Header 名) timeout: 2592000 # Token 有效期(30天) active-timeout: -1 # 临时有效期(-1 表示不启用) is-concurrent: true # 允许并发登录(多端同时在线) is-share: true # 多端共用同一 Token jwt-secret-key: xxx # JWT 签名密钥(生产环境请使用复杂密钥) ``` ### 常用 API ```java // 登录 StpUtil.login(userId); // 获取当前登录用户ID Long userId = StpUtil.getLoginIdAsLong(); // 检查登录状态 StpUtil.checkLogin(); // 权限校验 StpUtil.checkPermission("user:add"); // 角色校验 StpUtil.checkRole("admin"); // 注销登录 StpUtil.logout(); // 注解方式校验权限 @SaCheckPermission("user:add") public void addUser() { ... } ``` ### JWT 安全说明 - **防篡改**:JWT 通过 HMAC-SHA256 签名保证数据完整性,任何篡改都会导致签名验证失败 - **Secret 密钥**:仅存在于服务端,不随 Token 传输,用于签名生成和验证 - **不存敏感信息**:JWT Payload 仅为 Base64 编码(非加密),禁止存放密码等敏感数据 - **密钥管理**:生产环境务必替换 `jwt-secret-key`,建议 32 字符以上并定期轮换