本次重构旨在提高 PasskeyServiceImpl 类的代码可读性、可维护性和可测试性,通过方法拆分和工具类提取来优化代码结构。
generateRegistrationOptions 方法拆分:
generateAndSaveChallenge() - 生成并保存挑战buildRegistrationOptions() - 构建注册选项buildRelyingPartyInfo() - 构建RP信息buildUserInfo() - 构建用户信息buildPublicKeyCredentialParams() - 构建公钥凭据参数buildAuthenticatorSelection() - 构建认证器选择标准buildExcludeCredentials() - 构建排除凭据列表verifyRegistrationResponse 方法拆分:
validateChallenge() - 验证挑战parseRegistrationResponse() - 解析注册响应createServerProperty() - 创建服务器属性performRegistrationVerification() - 执行注册验证createUserPasskey() - 创建UserPasskey对象verifyAuthenticationResponse 方法拆分:
validateChallenge() - 验证挑战(复用)parseAuthenticationResponse() - 解析认证响应validateChallengeUserMatch() - 验证挑战与用户匹配performAuthenticationVerification() - 执行认证验证buildCredentialRecord() - 构建凭据记录创建了 PasskeyUtils 工具类,提取了通用的验证和构建逻辑:
generateChallenge() - 生成挑战buildRelyingPartyInfo() - 构建RP信息buildUserInfo() - 构建用户信息buildPublicKeyCredentialParams() - 构建公钥凭据参数buildAuthenticatorSelection() - 构建认证器选择buildCredentialList() - 构建凭据列表createServerProperty() - 创建服务器属性parseAndValidateOrigin() - 解析和验证originbase64Decode() / base64Encode() - Base64编解码validateNotEmpty() / validateNotNull() - 参数验证添加了常量定义以提高代码可读性:
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";
添加了 AuthenticationResponseData 内部类来封装认证响应数据,提高代码的组织性。
passkey/
├── service/impl/
│   └── PasskeyServiceImpl.java (重构后的主实现类)
└── util/
    └── PasskeyUtils.java (新增的工具类)
本次重构保持了所有公共接口的兼容性,不会影响现有的调用代码。所有的重构都是内部实现的优化,对外部调用者透明。