4.7 KiB
4.7 KiB
RuoYi 授权码模块
模块简介
ruoyi-license 是一个独立的授权码管理模块,用于控制系统的使用期限。当授权码过期后,系统将无法登录,已登录用户会被强制退出。
功能特性
- ✅ 授权码加密存储
- ✅ 登录时验证授权有效性
- ✅ 定时检查授权状态(每5分钟)
- ✅ 授权过期自动踢出在线用户
- ✅ 系统管理界面查看/激活授权
- ✅ 登录页面激活授权码
- ✅ 授权码生成工具
- ✅ 独立模块,方便其他项目复用
快速开始
1. 执行数据库脚本
-- 执行 sql/sys_license.sql 创建授权表和菜单
2. 添加模块依赖
在需要使用授权功能的项目中,添加依赖:
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-license</artifactId>
<version>4.8.2</version>
</dependency>
3. 配置包扫描
确保Spring能扫描到授权模块的包:
@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中添加:
<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中添加:
<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:
private static final String SECRET_KEY = "YourSecretKey123"; // 16位密钥
修改检查频率
编辑 LicenseCheckTask.java:
@Scheduled(cron = "0 */10 * * * ?") // 改为每10分钟检查
自定义拦截规则
编辑 LicenseConfig.java,添加或排除拦截路径:
.excludePathPatterns(
"/login",
"/your-custom-path/**"
)
注意事项
- 密钥安全:生产环境务必修改默认密钥
- 时间同步:确保服务器时间准确
- 数据备份:定期备份授权表数据
- 权限控制:授权管理菜单仅授予管理员
- 测试环境:建议先在测试环境验证功能
常见问题
Q: 授权码激活失败? A: 检查授权码格式是否正确,是否已过期
Q: 如何延长授权期限? A: 生成新的授权码并激活即可
Q: 授权过期后如何恢复? A: 在登录页点击"激活授权码",输入新的授权码
Q: 可以同时激活多个授权码吗? A: 系统只使用最新激活且未过期的授权码
技术支持
如有问题,请联系技术支持或查看RuoYi官方文档。