feat(captcha): 升级验证码校验流程与资源管理

- 引入MatchParam封装滑动轨迹及相关信息,提升扩展性。- 调整验证码生成与校验接口,以支持更精细的参数控制。
- 优化资源管理,提高验证码资源的加载效率。
- 更新文档与示例代码,以反映API的最新变化。BREAKING CHANGE: 验证码校验接口发生改变,现在需要传入MatchParam对象而非直接传入轨迹对象。这可能会影响直接调用验证码校验服务的客户端代码,需根据最新API文档进行适配。
This commit is contained in:
天爱有情
2024-08-19 16:26:18 +08:00
parent 9324cce657
commit 407bfe87b0
22 changed files with 118 additions and 53 deletions
@@ -18,6 +18,7 @@ import cloud.tianai.captcha.interceptor.EmptyCaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import cloud.tianai.captcha.validator.ImageCaptchaValidator;
import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack;
import cloud.tianai.captcha.validator.common.model.dto.MatchParam;
import cloud.tianai.captcha.validator.impl.SimpleImageCaptchaValidator;
import lombok.extern.slf4j.Slf4j;
@@ -155,23 +156,28 @@ public class DefaultImageCaptchaApplication implements ImageCaptchaApplication {
@Override
public ApiResponse<?> matching(String id, ImageCaptchaTrack imageCaptchaTrack) {
public ApiResponse<?> matching(String id, MatchParam matchParam) {
AnyMap validData = getVerification(id);
if (validData == null) {
return ApiResponse.ofMessage(ApiResponseStatusConstant.EXPIRED);
}
ApiResponse<?> response = beforeValid(id, imageCaptchaTrack, validData);
ApiResponse<?> response = beforeValid(id, matchParam, validData);
if (!response.isSuccess()) {
return response;
}
ApiResponse<?> basicValid = getImageCaptchaValidator().valid(imageCaptchaTrack, validData);
response = afterValid(id, imageCaptchaTrack, validData, basicValid);
ApiResponse<?> basicValid = getImageCaptchaValidator().valid(matchParam.getTrack(), validData);
response = afterValid(id, matchParam, validData, basicValid);
if (!response.isSuccess()) {
return response;
}
return basicValid;
}
@Override
public ApiResponse<?> matching(String id, ImageCaptchaTrack track) {
return matching(id, new MatchParam(track, null));
}
@Override
public boolean matching(String id, Float percentage) {
@@ -295,12 +301,12 @@ public class DefaultImageCaptchaApplication implements ImageCaptchaApplication {
captchaInterceptor.afterGenerateImageCaptchaValidData(captchaInterceptor.createContext(), imageCaptchaInfo.getType(), imageCaptchaInfo, validData);
}
private ApiResponse<?> beforeValid(String id, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData) {
return captchaInterceptor.beforeValid(captchaInterceptor.createContext(), getCaptchaTypeById(id), imageCaptchaTrack, validData);
private ApiResponse<?> beforeValid(String id, MatchParam matchParam, AnyMap validData) {
return captchaInterceptor.beforeValid(captchaInterceptor.createContext(), getCaptchaTypeById(id), matchParam, validData);
}
private ApiResponse<?> afterValid(String id, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData, ApiResponse<?> basicValid) {
return captchaInterceptor.afterValid(captchaInterceptor.createContext(), getCaptchaTypeById(id), imageCaptchaTrack, validData, basicValid);
private ApiResponse<?> afterValid(String id, MatchParam matchParam, AnyMap validData, ApiResponse<?> basicValid) {
return captchaInterceptor.afterValid(captchaInterceptor.createContext(), getCaptchaTypeById(id), matchParam, validData, basicValid);
}
}