# RuoYi 授权码模块
## 模块简介
ruoyi-license 是一个独立的授权码管理模块,用于控制系统的使用期限。当授权码过期后,系统将无法登录,已登录用户会被强制退出。
## 功能特性
- ✅ 授权码加密存储
- ✅ 登录时验证授权有效性
- ✅ 定时检查授权状态(每5分钟)
- ✅ 授权过期自动踢出在线用户
- ✅ 系统管理界面查看/激活授权
- ✅ 登录页面激活授权码
- ✅ 授权码生成工具
- ✅ 独立模块,方便其他项目复用
## 快速开始
### 1. 执行数据库脚本
```sql
-- 执行 sql/sys_license.sql 创建授权表和菜单
```
### 2. 添加模块依赖
在需要使用授权功能的项目中,添加依赖:
```xml
com.ruoyi
ruoyi-license
4.8.2
```
### 3. 配置包扫描
确保Spring能扫描到授权模块的包:
```java
@SpringBootApplication
@ComponentScan(basePackages = {"com.ruoyi"})
public class RuoYiApplication {
// ...
}
```
### 4. 生成授权码
访问系统管理 -> 授权管理,点击"生成授权码"按钮,输入授权天数(如365天),系统会生成加密的授权码。
### 5. 激活授权码
**方式一:登录页激活**
- 在登录页面点击"激活授权码"链接
- 输入授权码并提交
**方式二:系统内激活**
- 登录系统后,进入"系统管理 -> 授权管理"
- 点击"激活授权码"按钮
- 输入授权码并提交
## 核心类说明
### 1. 实体类
- `SysLicense`: 授权码实体,包含授权码、开始时间、结束时间、状态等信息
### 2. 工具类
- `LicenseUtils`: 授权码工具类
- `generateLicense()`: 生成授权码
- `encrypt()`: 加密数据
- `decrypt()`: 解密数据
- `validateFormat()`: 验证授权码格式
### 3. 服务类
- `ISysLicenseService`: 授权服务接口
- `activeLicense()`: 激活授权码
- `checkLicenseValid()`: 检查授权是否有效
- `getActiveLicense()`: 获取当前有效授权
### 4. 拦截器
- `LicenseInterceptor`: 授权拦截器,在每次请求时验证授权有效性
### 5. 定时任务
- `LicenseCheckTask`: 每5分钟检查授权状态,过期自动踢出在线用户
## 授权码格式
授权码采用AES加密,格式为:
```
加密(开始时间戳|结束时间戳)
```
示例:
```
原始数据: 1704067200000|1735689600000
加密后: Xj8K9mN2pQ5rT7vW1yZ3aB4cD6eF8gH0iJ2kL4mN6oP8qR0sT2uV4wX6yZ8
```
## 集成到其他项目
### 步骤1:复制模块
将 `ruoyi-license` 文件夹复制到目标项目根目录
### 步骤2:修改pom.xml
在父pom.xml中添加:
```xml
ruoyi-license
com.ruoyi
ruoyi-license
${project.version}
```
### 步骤3:添加依赖
在启动模块的pom.xml中添加:
```xml
com.ruoyi
ruoyi-license
```
### 步骤4:执行SQL脚本
执行 `sql/sys_license.sql` 创建数据库表
### 步骤5:配置Controller
将 `SysLicenseController.java` 复制到项目的controller包中
### 步骤6:配置前端页面
将 `templates/system/license/` 目录复制到项目的templates目录
### 步骤7:修改登录页面
参考 `login.html` 和 `login.js` 的修改,添加授权码激活入口
## 自定义配置
### 修改密钥
编辑 `LicenseUtils.java`:
```java
private static final String SECRET_KEY = "YourSecretKey123"; // 16位密钥
```
### 修改检查频率
编辑 `LicenseCheckTask.java`:
```java
@Scheduled(cron = "0 */10 * * * ?") // 改为每10分钟检查
```
### 自定义拦截规则
编辑 `LicenseConfig.java`,添加或排除拦截路径:
```java
.excludePathPatterns(
"/login",
"/your-custom-path/**"
)
```
## 注意事项
1. **密钥安全**:生产环境务必修改默认密钥
2. **时间同步**:确保服务器时间准确
3. **数据备份**:定期备份授权表数据
4. **权限控制**:授权管理菜单仅授予管理员
5. **测试环境**:建议先在测试环境验证功能
## 常见问题
**Q: 授权码激活失败?**
A: 检查授权码格式是否正确,是否已过期
**Q: 如何延长授权期限?**
A: 生成新的授权码并激活即可
**Q: 授权过期后如何恢复?**
A: 在登录页点击"激活授权码",输入新的授权码
**Q: 可以同时激活多个授权码吗?**
A: 系统只使用最新激活且未过期的授权码
## 技术支持
如有问题,请联系技术支持或查看RuoYi官方文档。