# 快速开始指南
本指南将帮助您在5分钟内快速集成Medical License组件到您的Spring Boot医疗软件系统中。
## 📋 前置条件
- Java 8 或更高版本
- Spring Boot 2.0 或更高版本
- Maven 或 Gradle 构建工具
## 🚀 快速集成
### 步骤1: 添加依赖
在您的 `pom.xml` 中添加依赖:
```xml
com.bskj.license
byjc-spring-boot-starter-license
1.0.0
```
### 步骤2: 生成密钥对
```bash
# 下载并运行密钥生成工具
java -cp byjc-spring-boot-starter-license-1.0.0.jar com.bskj.framework.license.generator.KeyGenerator private.key public.key
```
这将生成两个文件:
- `private.key` - 私钥(用于签名license,请安全保存)
- `public.key` - 公钥(用于验证license,可随应用分发)
### 步骤3: 生成License文件
```bash
# 生成license文件
java -cp byjc-spring-boot-starter-license-1.0.0.jar com.bskj.framework.license.generator.LicenseGenerator private.key license.json "您的医院名称"
```
### 步骤4: 配置应用
在 `application.yml` 中添加配置:
```yaml
bskj:
license:
enabled: true
file-path: "license.json"
public-key-path: "public.key"
default-strategy: "notification_only" # 推荐从宽松策略开始
```
### 步骤5: 使用注解控制权限
```java
@RestController
public class PatientController {
@LicenseRequired(modules = {"patient_management"})
@GetMapping("/patients")
public List getPatients() {
return patientService.getAllPatients();
}
}
```
### 步骤6: 启动应用
```bash
java -jar your-bskj-app.jar
```
🎉 **恭喜!** 您的应用现在已经集成了License授权功能!
## 🔧 常用配置
### 基础配置
```yaml
bskj:
license:
enabled: true # 启用license检查
file-path: "license.json" # license文件路径
public-key-path: "public.key" # 公钥文件路径
default-strategy: "notification_only" # 授权策略
check-interval-seconds: 3600 # 检查间隔(1小时)
default-warning-days: 30 # 预警天数
```
### 通知配置
```yaml
bskj:
license:
notification:
log-enabled: true # 启用日志通知
email-enabled: false # 禁用邮件通知(可选)
jmx-enabled: false # 禁用JMX通知(可选)
```
## 📝 常用注解
### @LicenseRequired 注解参数
```java
@LicenseRequired(
modules = {"billing", "reporting"}, // 需要的模块权限
checkUserLimit = true, // 检查用户数限制
allowExpired = false, // 是否允许过期时执行
strict = false, // 严格模式
message = "需要计费和报表模块授权" // 自定义错误消息
)
```
### 常用场景
```java
// 基础权限检查
@LicenseRequired(modules = {"patient_management"})
// 检查用户数限制
@LicenseRequired(checkUserLimit = true)
// 严格模式(任何license问题都阻止执行)
@LicenseRequired(strict = true)
// 允许过期时执行(紧急功能)
@LicenseRequired(modules = {"emergency"}, allowExpired = true)
```
## 🎯 授权策略说明
### 1. NOTIFICATION_ONLY(推荐开始使用)
- ✅ 系统正常运行
- ✅ 仅通过日志/通知提醒
- ✅ 不影响业务功能
- 🎯 适合:对业务连续性要求极高的场景
### 2. PREVENT_RESTART
- ✅ 当前服务继续运行
- ❌ 阻止应用重新启动
- 🎯 适合:平衡业务连续性和授权控制
### 3. GRACEFUL_SHUTDOWN
- ⏰ 提供宽限期
- ❌ 宽限期后停止服务
- ❌ 阻止重新启动
- 🎯 适合:给客户充足续费时间
## 🛠️ 编程式使用
```java
@Service
public class BusinessService {
@Autowired
private LicenseService licenseService;
public void performOperation() {
// 检查license状态
if (!licenseService.isLicenseValid()) {
throw new BusinessException("License无效");
}
// 检查模块权限
if (!licenseService.isModulePermitted("advanced_features")) {
throw new BusinessException("高级功能未授权");
}
// 检查用户数限制
if (!licenseService.isUserCountWithinLimit(getCurrentUserCount())) {
throw new BusinessException("用户数超过限制");
}
// 执行业务逻辑
doBusinessLogic();
}
}
```
## 📊 监控License状态
### REST API方式
```java
@RestController
public class LicenseController {
@Autowired
private LicenseService licenseService;
@GetMapping("/api/license/status")
public Map getLicenseStatus() {
return Map.of(
"valid", licenseService.isLicenseValid(),
"status", licenseService.getLicenseStatus(),
"remainingDays", licenseService.getRemainingDays(),
"warning", licenseService.getLicenseWarningMessage()
);
}
}
```
### 事件监听方式
```java
@Component
public class LicenseEventListener {
@EventListener
public void handleStatusChange(LicenseStatusChangeEvent event) {
logger.info("License状态变化: {} -> {}",
event.getPreviousStatus(), event.getCurrentStatus());
}
}
```
## 🔍 故障排除
### 常见问题
**Q: 应用启动时提示"License文件不存在"**
```yaml
# 检查配置文件中的路径是否正确
bskj:
license:
file-path: "license.json" # 确保文件存在
```
**Q: 提示"签名验证失败"**
```bash
# 确保使用正确的公钥文件
# 检查license文件是否被篡改
```
**Q: 注解不生效**
```java
// 确保启用了AOP
@EnableAspectJAutoProxy
@SpringBootApplication
public class Application {
// ...
}
```
### 调试模式
```yaml
logging:
level:
com.bskj.license: DEBUG # 启用详细日志
```
## 📈 生产环境建议
### 安全建议
- 🔐 私钥文件安全保存,不要包含在应用中
- 🔐 使用HTTPS传输license文件
- 🔐 定期更换密钥对
- 🔐 监控license文件访问日志
### 部署建议
- 📁 将license和公钥文件放在应用外部目录
- 📁 使用绝对路径配置文件位置
- 📁 设置适当的文件权限
### 监控建议
- 📊 启用邮件通知给管理员
- 📊 监控license状态变化
- 📊 设置合适的检查间隔
- 📊 建立license续费提醒流程
## 🎓 进阶使用
查看完整文档:
- [README.md](README.md) - 完整功能说明
- [example/](example/) - 完整示例代码
- [application-license-example.yml](src/main/resources/application-license-example.yml) - 详细配置示例
## 💬 技术支持
如有问题,请查看:
1. 📖 [完整文档](README.md)
2. 💻 [示例代码](example/)
3. 🐛 [故障排除指南](README.md#故障排除)
---
🎉 **恭喜您完成了快速集成!** 现在您的医疗软件系统已经具备了专业的License授权功能。