mirror of
https://gitee.com/dromara/MaxKey.git
synced 2025-12-06 08:59:10 +08:00
- 新增maxkey-starter-passkey模块,支持WebAuthn4J - 添加Passkey相关实体类、Mapper和Service - 配置WebAuthn依赖和JVM内存参数 - 修复CBORFactory依赖问题
3.6 KiB
3.6 KiB
PasskeyServiceImpl 重构总结
重构目标
本次重构旨在提高 PasskeyServiceImpl 类的代码可读性、可维护性和可测试性,通过方法拆分和工具类提取来优化代码结构。
主要改进
1. 方法拆分
原有的大方法被拆分为更小、职责单一的方法:
generateRegistrationOptions 方法拆分:
generateAndSaveChallenge()- 生成并保存挑战buildRegistrationOptions()- 构建注册选项buildRelyingPartyInfo()- 构建RP信息buildUserInfo()- 构建用户信息buildPublicKeyCredentialParams()- 构建公钥凭据参数buildAuthenticatorSelection()- 构建认证器选择标准buildExcludeCredentials()- 构建排除凭据列表
verifyRegistrationResponse 方法拆分:
validateChallenge()- 验证挑战parseRegistrationResponse()- 解析注册响应createServerProperty()- 创建服务器属性performRegistrationVerification()- 执行注册验证createUserPasskey()- 创建UserPasskey对象
verifyAuthenticationResponse 方法拆分:
validateChallenge()- 验证挑战(复用)parseAuthenticationResponse()- 解析认证响应validateChallengeUserMatch()- 验证挑战与用户匹配performAuthenticationVerification()- 执行认证验证buildCredentialRecord()- 构建凭据记录
2. 工具类提取
创建了 PasskeyUtils 工具类,提取了通用的验证和构建逻辑:
generateChallenge()- 生成挑战buildRelyingPartyInfo()- 构建RP信息buildUserInfo()- 构建用户信息buildPublicKeyCredentialParams()- 构建公钥凭据参数buildAuthenticatorSelection()- 构建认证器选择buildCredentialList()- 构建凭据列表createServerProperty()- 创建服务器属性parseAndValidateOrigin()- 解析和验证originbase64Decode()/base64Encode()- Base64编解码validateNotEmpty()/validateNotNull()- 参数验证
3. 常量定义
添加了常量定义以提高代码可读性:
private static final String CHALLENGE_TYPE_REGISTRATION = "registration";
private static final String CHALLENGE_TYPE_AUTHENTICATION = "authentication";
private static final String CREDENTIAL_TYPE_PUBLIC_KEY = "public-key";
private static final String DEFAULT_INST_ID = "1";
private static final String DEFAULT_DEVICE_NAME = "Unknown Device";
4. 内部类优化
添加了 AuthenticationResponseData 内部类来封装认证响应数据,提高代码的组织性。
5. 日志优化
- 简化了冗长的调试日志
- 将详细的调试信息改为debug级别
- 保留了关键的错误和警告日志
重构效果
代码质量提升:
- 可读性:方法职责更加单一,代码逻辑更清晰
- 可维护性:功能模块化,便于修改和扩展
- 可测试性:小方法更容易进行单元测试
- 复用性:工具类方法可在其他地方复用
代码行数优化:
- 原文件:约900行
- 重构后主文件:约774行
- 新增工具类:约238行
- 总体代码更加模块化和组织化
文件结构
passkey/
├── service/impl/
│ └── PasskeyServiceImpl.java (重构后的主实现类)
└── util/
└── PasskeyUtils.java (新增的工具类)
向后兼容性
本次重构保持了所有公共接口的兼容性,不会影响现有的调用代码。所有的重构都是内部实现的优化,对外部调用者透明。
后续建议
- 为新的私有方法添加单元测试
- 考虑将一些配置参数提取到配置文件中
- 可以进一步优化异常处理机制
- 考虑添加更多的参数验证逻辑