194 lines
4.7 KiB
Markdown
194 lines
4.7 KiB
Markdown
# RuoYi 授权码模块
|
||
|
||
## 模块简介
|
||
|
||
ruoyi-license 是一个独立的授权码管理模块,用于控制系统的使用期限。当授权码过期后,系统将无法登录,已登录用户会被强制退出。
|
||
|
||
## 功能特性
|
||
|
||
- ✅ 授权码加密存储
|
||
- ✅ 登录时验证授权有效性
|
||
- ✅ 定时检查授权状态(每5分钟)
|
||
- ✅ 授权过期自动踢出在线用户
|
||
- ✅ 系统管理界面查看/激活授权
|
||
- ✅ 登录页面激活授权码
|
||
- ✅ 授权码生成工具
|
||
- ✅ 独立模块,方便其他项目复用
|
||
|
||
## 快速开始
|
||
|
||
### 1. 执行数据库脚本
|
||
|
||
```sql
|
||
-- 执行 sql/sys_license.sql 创建授权表和菜单
|
||
```
|
||
|
||
### 2. 添加模块依赖
|
||
|
||
在需要使用授权功能的项目中,添加依赖:
|
||
|
||
```xml
|
||
<dependency>
|
||
<groupId>com.ruoyi</groupId>
|
||
<artifactId>ruoyi-license</artifactId>
|
||
<version>4.8.2</version>
|
||
</dependency>
|
||
```
|
||
|
||
### 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
|
||
<modules>
|
||
<module>ruoyi-license</module>
|
||
</modules>
|
||
|
||
<dependencyManagement>
|
||
<dependencies>
|
||
<dependency>
|
||
<groupId>com.ruoyi</groupId>
|
||
<artifactId>ruoyi-license</artifactId>
|
||
<version>${project.version}</version>
|
||
</dependency>
|
||
</dependencies>
|
||
</dependencyManagement>
|
||
```
|
||
|
||
### 步骤3:添加依赖
|
||
在启动模块的pom.xml中添加:
|
||
```xml
|
||
<dependency>
|
||
<groupId>com.ruoyi</groupId>
|
||
<artifactId>ruoyi-license</artifactId>
|
||
</dependency>
|
||
```
|
||
|
||
### 步骤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官方文档。
|