本次重构旨在提高 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 (新增的工具类)
本次重构保持了所有公共接口的兼容性,不会影响现有的调用代码。所有的重构都是内部实现的优化,对外部调用者透明。