diff --git a/pom.xml b/pom.xml index b617096..9d19e20 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 cloud.tianai.captcha tianai-captcha - 1.5.0 + 1.5.1 tianai-captcha 行为验证码 diff --git a/readme.md b/readme.md index 204b84b..1b005ff 100644 --- a/readme.md +++ b/readme.md @@ -37,13 +37,15 @@ cloud.tianai.captcha tianai-captcha - 1.5.0 + 1.5.1 ``` ### 2. 构建 `ImageCaptchaApplication`负责生成和校验验证码 ```java +import cloud.tianai.captcha.validator.common.model.dto.MatchParam; + public class ApplicationTest { public static void main(String[] args) { @@ -63,7 +65,7 @@ public class ApplicationTest { // 注意: 该项目只负责生成和校验验证码数据, 至于二次验证等需要自行扩展 String id = res.getId(); ImageCaptchaTrack imageCaptchaTrack = null; - ApiResponse valid = application.matching(id, imageCaptchaTrack); + ApiResponse valid = application.matching(id, new MatchParam(imageCaptchaTrack)); System.out.println(valid.isSuccess()); diff --git a/src/main/java/cloud/tianai/captcha/application/DefaultImageCaptchaApplication.java b/src/main/java/cloud/tianai/captcha/application/DefaultImageCaptchaApplication.java index bf31170..35df0db 100644 --- a/src/main/java/cloud/tianai/captcha/application/DefaultImageCaptchaApplication.java +++ b/src/main/java/cloud/tianai/captcha/application/DefaultImageCaptchaApplication.java @@ -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); } } diff --git a/src/main/java/cloud/tianai/captcha/application/FilterImageCaptchaApplication.java b/src/main/java/cloud/tianai/captcha/application/FilterImageCaptchaApplication.java index 224f891..dcca9bb 100644 --- a/src/main/java/cloud/tianai/captcha/application/FilterImageCaptchaApplication.java +++ b/src/main/java/cloud/tianai/captcha/application/FilterImageCaptchaApplication.java @@ -10,6 +10,7 @@ import cloud.tianai.captcha.interceptor.CaptchaInterceptor; 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; /** * @Author: 天爱有情 @@ -51,8 +52,13 @@ public class FilterImageCaptchaApplication implements ImageCaptchaApplication { } @Override - public ApiResponse matching(String id, ImageCaptchaTrack ImageCaptchaTrack) { - return target.matching(id, ImageCaptchaTrack); + public ApiResponse matching(String id, MatchParam matchParam) { + return target.matching(id, matchParam); + } + + @Override + public ApiResponse matching(String id, ImageCaptchaTrack track) { + return target.matching(id, track); } @Override diff --git a/src/main/java/cloud/tianai/captcha/application/ImageCaptchaApplication.java b/src/main/java/cloud/tianai/captcha/application/ImageCaptchaApplication.java index 81259bd..c751d4a 100644 --- a/src/main/java/cloud/tianai/captcha/application/ImageCaptchaApplication.java +++ b/src/main/java/cloud/tianai/captcha/application/ImageCaptchaApplication.java @@ -11,6 +11,7 @@ import cloud.tianai.captcha.interceptor.CaptchaInterceptor; 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; /** * @Author: 天爱有情 @@ -63,14 +64,23 @@ public interface ImageCaptchaApplication { /** * 匹配 * - * @param id 验证码的ID - * @param imageCaptchaTrack 滑动轨迹 + * @param id 验证码的ID + * @param matchParam 匹配数据,包含鼠标轨迹,设备信息等 * @return 匹配成功返回true, 否则返回false */ - ApiResponse matching(String id, ImageCaptchaTrack imageCaptchaTrack); + ApiResponse matching(String id, MatchParam matchParam); /** - * 兼容一下旧版本,新版本建议使用 {@link ImageCaptchaApplication#matching(String, ImageCaptchaTrack)} + * 兼容一下旧版本,新版本建议使用 {@link ImageCaptchaApplication#matching(String, MatchParam)} + * + * @param id 验证码的ID + * @param track 轨迹数据 + * @return 匹配成功返回true, 否则返回false + */ + ApiResponse matching(String id, ImageCaptchaTrack track); + + /** + * 兼容一下旧版本,新版本建议使用 {@link ImageCaptchaApplication#matching(String, MatchParam)} * * @param id id * @param percentage 百分比数据 @@ -114,6 +124,7 @@ public interface ImageCaptchaApplication { * @return CaptchaInterceptor */ CaptchaInterceptor getCaptchaInterceptor(); + /** * 设置 拦截器 * diff --git a/src/main/java/cloud/tianai/captcha/common/AnyMap.java b/src/main/java/cloud/tianai/captcha/common/AnyMap.java index ca7bbfd..fe03829 100644 --- a/src/main/java/cloud/tianai/captcha/common/AnyMap.java +++ b/src/main/java/cloud/tianai/captcha/common/AnyMap.java @@ -1,5 +1,7 @@ package cloud.tianai.captcha.common; +import lombok.EqualsAndHashCode; + import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; @@ -8,6 +10,7 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; +@EqualsAndHashCode public class AnyMap implements Map { private Map target; @@ -19,6 +22,7 @@ public class AnyMap implements Map { public AnyMap(Map map) { this.target = map; } + public Float getFloat(String key) { return getFloat(key, null); } @@ -69,7 +73,7 @@ public class AnyMap implements Map { } - public static AnyMap of(Map map) { + public static AnyMap of(Map map) { return new AnyMap(map); } diff --git a/src/main/java/cloud/tianai/captcha/common/constant/CommonConstant.java b/src/main/java/cloud/tianai/captcha/common/constant/CommonConstant.java index 274ec3e..6d7ac63 100644 --- a/src/main/java/cloud/tianai/captcha/common/constant/CommonConstant.java +++ b/src/main/java/cloud/tianai/captcha/common/constant/CommonConstant.java @@ -14,7 +14,7 @@ public interface CommonConstant { /** * 默认的resource资源文件路径. */ - String DEFAULT_SLIDER_IMAGE_RESOURCE_PATH = "META-INF/cut-image/resource"; + String DEFAULT_SLIDER_IMAGE_RESOURCE_PATH = "META-INF/cut-image/resource"; /** * 默认的template资源文件路径. */ diff --git a/src/main/java/cloud/tianai/captcha/common/exception/ImageCaptchaException.java b/src/main/java/cloud/tianai/captcha/common/exception/ImageCaptchaException.java index 3701ea7..db7ab78 100644 --- a/src/main/java/cloud/tianai/captcha/common/exception/ImageCaptchaException.java +++ b/src/main/java/cloud/tianai/captcha/common/exception/ImageCaptchaException.java @@ -5,8 +5,7 @@ package cloud.tianai.captcha.common.exception; * @date 2022/5/7 9:04 * @Description 图片验证码异常 */ -public class ImageCaptchaException extends RuntimeException { - +public class ImageCaptchaException extends RuntimeException{ public ImageCaptchaException() { } @@ -25,5 +24,4 @@ public class ImageCaptchaException extends RuntimeException { public ImageCaptchaException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } - } diff --git a/src/main/java/cloud/tianai/captcha/common/response/ApiResponse.java b/src/main/java/cloud/tianai/captcha/common/response/ApiResponse.java index 7719a4c..c0c2bf3 100644 --- a/src/main/java/cloud/tianai/captcha/common/response/ApiResponse.java +++ b/src/main/java/cloud/tianai/captcha/common/response/ApiResponse.java @@ -16,7 +16,6 @@ public class ApiResponse implements Serializable { public static final ApiResponse SUCCESS; static { - //默认 CodeDefinition definition = ApiResponseStatusConstant.SUCCESS; SUCCESS = new ApiResponse(definition.getCode(), definition.getMessage(), null); } diff --git a/src/main/java/cloud/tianai/captcha/common/response/ApiResponseStatusConstant.java b/src/main/java/cloud/tianai/captcha/common/response/ApiResponseStatusConstant.java index 93fd6e5..b026e36 100644 --- a/src/main/java/cloud/tianai/captcha/common/response/ApiResponseStatusConstant.java +++ b/src/main/java/cloud/tianai/captcha/common/response/ApiResponseStatusConstant.java @@ -15,24 +15,12 @@ public interface ApiResponseStatusConstant { */ CodeDefinition SUCCESS = new CodeDefinition(200, "OK"); - /** - * 无效参数 - */ CodeDefinition NOT_VALID_PARAM = new CodeDefinition(403, "无效参数"); - /** - * 未知的内部错误 - */ CodeDefinition INTERNAL_SERVER_ERROR = new CodeDefinition(500, "未知的内部错误"); - /** - * 已失效 - */ CodeDefinition EXPIRED = new CodeDefinition(4000, "已失效"); - /** - * 基础校验失败 - */ CodeDefinition BASIC_CHECK_FAIL = new CodeDefinition(4001, "基础校验失败"); diff --git a/src/main/java/cloud/tianai/captcha/generator/common/model/dto/GenerateParam.java b/src/main/java/cloud/tianai/captcha/generator/common/model/dto/GenerateParam.java index 6b02c6c..605368b 100644 --- a/src/main/java/cloud/tianai/captcha/generator/common/model/dto/GenerateParam.java +++ b/src/main/java/cloud/tianai/captcha/generator/common/model/dto/GenerateParam.java @@ -13,7 +13,8 @@ import lombok.*; @Builder @NoArgsConstructor @AllArgsConstructor -@EqualsAndHashCode +// param作为扩展字段暂时将param从equals和toString中移除掉 以适应 CacheImageCaptchaGenerator +@EqualsAndHashCode(exclude = "param") public class GenerateParam { @@ -60,4 +61,5 @@ public class GenerateParam { } return param.getOrDefault(key, defaultValue); } + } diff --git a/src/main/java/cloud/tianai/captcha/generator/common/model/dto/RotateImageCaptchaInfo.java b/src/main/java/cloud/tianai/captcha/generator/common/model/dto/RotateImageCaptchaInfo.java index b5b465d..dfb7168 100644 --- a/src/main/java/cloud/tianai/captcha/generator/common/model/dto/RotateImageCaptchaInfo.java +++ b/src/main/java/cloud/tianai/captcha/generator/common/model/dto/RotateImageCaptchaInfo.java @@ -36,7 +36,7 @@ public class RotateImageCaptchaInfo extends ImageCaptchaInfo { rotateImageCaptchaInfo.setRandomX(randomX); rotateImageCaptchaInfo.setBackgroundImage(backgroundImage); rotateImageCaptchaInfo.setBackgroundImageTag(backgroundImageTag); - rotateImageCaptchaInfo.setTemplateImage(templateImageTag); + rotateImageCaptchaInfo.setTemplateImageTag(templateImageTag); rotateImageCaptchaInfo.setTolerant(DEFAULT_TOLERANT); rotateImageCaptchaInfo.setTemplateImage(templateImage); rotateImageCaptchaInfo.setBackgroundImageWidth(bgImageWidth); diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java index 18e0fe8..f512ac4 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java @@ -211,4 +211,5 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator { public void setInterceptor(CaptchaInterceptor interceptor) { target.setInterceptor(interceptor); } + } diff --git a/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptor.java b/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptor.java index 38dba8b..b699565 100644 --- a/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptor.java +++ b/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptor.java @@ -8,7 +8,7 @@ import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator; import cloud.tianai.captcha.generator.common.model.dto.CaptchaExchange; import cloud.tianai.captcha.generator.common.model.dto.GenerateParam; import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo; -import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack; +import cloud.tianai.captcha.validator.common.model.dto.MatchParam; // ============================ 拦截器执行顺序 ============================ @@ -55,7 +55,7 @@ public interface CaptchaInterceptor { default void afterGenerateCaptcha(Context context, String type, ImageCaptchaInfo imageCaptchaInfo, CaptchaResponse captchaResponse) { } - default ApiResponse beforeValid(Context context, String type, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData) { + default ApiResponse beforeValid(Context context, String type, MatchParam matchParam, AnyMap validData) { Object preReturn = context.getPreReturnData(); if (preReturn != null) { return (ApiResponse) preReturn; @@ -63,7 +63,7 @@ public interface CaptchaInterceptor { return ApiResponse.ofSuccess(); } - default ApiResponse afterValid(Context context, String type, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData, ApiResponse basicValid) { + default ApiResponse afterValid(Context context, String type, MatchParam matchParam, AnyMap validData, ApiResponse basicValid) { Object preReturn = context.getPreReturnData(); if (preReturn != null) { return (ApiResponse) preReturn; diff --git a/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptorGroup.java b/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptorGroup.java index 13117cb..449f7db 100644 --- a/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptorGroup.java +++ b/src/main/java/cloud/tianai/captcha/interceptor/CaptchaInterceptorGroup.java @@ -8,7 +8,7 @@ import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator; import cloud.tianai.captcha.generator.common.model.dto.CaptchaExchange; import cloud.tianai.captcha.generator.common.model.dto.GenerateParam; import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo; -import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack; +import cloud.tianai.captcha.validator.common.model.dto.MatchParam; import lombok.Getter; import lombok.Setter; @@ -87,24 +87,24 @@ public class CaptchaInterceptorGroup implements CaptchaInterceptor { } @Override - public ApiResponse beforeValid(Context context, String type, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData) { + public ApiResponse beforeValid(Context context, String type, MatchParam matchParam, AnyMap validData) { context = createContextIfNecessary(context); ApiResponse beforeValid = null; while (context.next() < context.getCount()) { CaptchaInterceptor interceptor = validators.get(context.getCurrent()); - beforeValid = interceptor.beforeValid(context, type, imageCaptchaTrack, validData); + beforeValid = interceptor.beforeValid(context, type, matchParam, validData); context.setPreReturnData(beforeValid); } return beforeValid == null ? ApiResponse.ofSuccess() : beforeValid; } @Override - public ApiResponse afterValid(Context context, String type, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData, ApiResponse basicValid) { + public ApiResponse afterValid(Context context, String type, MatchParam matchParam, AnyMap validData, ApiResponse basicValid) { context = createContextIfNecessary(context); ApiResponse valid = null; while (context.next() < context.getCount()) { CaptchaInterceptor interceptor = validators.get(context.getCurrent()); - valid = interceptor.afterValid(context, type, imageCaptchaTrack, validData, basicValid); + valid = interceptor.afterValid(context, type, matchParam, validData, basicValid); context.setPreReturnData(valid); } return valid == null ? ApiResponse.ofSuccess() : valid; diff --git a/src/main/java/cloud/tianai/captcha/interceptor/impl/BasicTrackCaptchaInterceptor.java b/src/main/java/cloud/tianai/captcha/interceptor/impl/BasicTrackCaptchaInterceptor.java index 7d6b20d..2838c65 100644 --- a/src/main/java/cloud/tianai/captcha/interceptor/impl/BasicTrackCaptchaInterceptor.java +++ b/src/main/java/cloud/tianai/captcha/interceptor/impl/BasicTrackCaptchaInterceptor.java @@ -7,6 +7,7 @@ import cloud.tianai.captcha.common.util.CaptchaTypeClassifier; import cloud.tianai.captcha.interceptor.CaptchaInterceptor; import cloud.tianai.captcha.interceptor.Context; import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack; +import cloud.tianai.captcha.validator.common.model.dto.MatchParam; import java.util.List; @@ -24,14 +25,15 @@ public class BasicTrackCaptchaInterceptor implements CaptchaInterceptor { } @Override - public ApiResponse afterValid(Context context, String type, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData, ApiResponse basicValid) { + public ApiResponse afterValid(Context context, String type, MatchParam matchData, AnyMap validData, ApiResponse basicValid) { if (!basicValid.isSuccess()) { - return context.getGroup().afterValid(context, type, imageCaptchaTrack, validData, basicValid); + return context.getGroup().afterValid(context, type, matchData, validData, basicValid); } if (!CaptchaTypeClassifier.isSliderCaptcha(type)) { // 不是滑动验证码的话暂时跳过,点选验证码行为轨迹还没做 return ApiResponse.ofSuccess(); } + ImageCaptchaTrack imageCaptchaTrack = matchData.getTrack(); // 进行行为轨迹检测 long startSlidingTime = imageCaptchaTrack.getStartTime().getTime(); long endSlidingTime = imageCaptchaTrack.getStopTime().getTime(); diff --git a/src/main/java/cloud/tianai/captcha/interceptor/impl/ParamCheckCaptchaInterceptor.java b/src/main/java/cloud/tianai/captcha/interceptor/impl/ParamCheckCaptchaInterceptor.java index e461c1e..27316cd 100644 --- a/src/main/java/cloud/tianai/captcha/interceptor/impl/ParamCheckCaptchaInterceptor.java +++ b/src/main/java/cloud/tianai/captcha/interceptor/impl/ParamCheckCaptchaInterceptor.java @@ -7,6 +7,7 @@ import cloud.tianai.captcha.common.util.ObjectUtils; import cloud.tianai.captcha.interceptor.CaptchaInterceptor; import cloud.tianai.captcha.interceptor.Context; import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack; +import cloud.tianai.captcha.validator.common.model.dto.MatchParam; /** * @Author: 天爱有情 @@ -15,8 +16,8 @@ import cloud.tianai.captcha.validator.common.model.dto.ImageCaptchaTrack; */ public class ParamCheckCaptchaInterceptor implements CaptchaInterceptor { @Override - public ApiResponse beforeValid(Context context, String type, ImageCaptchaTrack imageCaptchaTrack, AnyMap validData) { - checkParam(imageCaptchaTrack); + public ApiResponse beforeValid(Context context, String type, MatchParam matchParam, AnyMap validData) { + checkParam(matchParam.getTrack()); return ApiResponse.ofSuccess(); } diff --git a/src/main/java/cloud/tianai/captcha/resource/AbstractResourceProvider.java b/src/main/java/cloud/tianai/captcha/resource/AbstractResourceProvider.java index bcc5352..a2236d8 100644 --- a/src/main/java/cloud/tianai/captcha/resource/AbstractResourceProvider.java +++ b/src/main/java/cloud/tianai/captcha/resource/AbstractResourceProvider.java @@ -10,7 +10,6 @@ import java.io.InputStream; * @Description 抽象的ResourceProvider */ public abstract class AbstractResourceProvider implements ResourceProvider { - @Override public InputStream getResourceInputStream(Resource data) { InputStream resourceInputStream = doGetResourceInputStream(data); @@ -27,5 +26,4 @@ public abstract class AbstractResourceProvider implements ResourceProvider { * @return InputStream */ public abstract InputStream doGetResourceInputStream(Resource data); - } diff --git a/src/main/java/cloud/tianai/captcha/resource/impl/LocalMemoryResourceStore.java b/src/main/java/cloud/tianai/captcha/resource/impl/LocalMemoryResourceStore.java index c1b1a69..a67834e 100644 --- a/src/main/java/cloud/tianai/captcha/resource/impl/LocalMemoryResourceStore.java +++ b/src/main/java/cloud/tianai/captcha/resource/impl/LocalMemoryResourceStore.java @@ -16,7 +16,6 @@ import java.util.concurrent.ThreadLocalRandom; * @Description 默认的资源存储 */ public class LocalMemoryResourceStore implements ResourceStore { - private static final String TYPE_TAG_SPLIT_FLAG = "|"; /** 用于检索 type和tag. */ diff --git a/src/main/java/cloud/tianai/captcha/validator/common/model/dto/Drives.java b/src/main/java/cloud/tianai/captcha/validator/common/model/dto/Drives.java new file mode 100644 index 0000000..2ac6061 --- /dev/null +++ b/src/main/java/cloud/tianai/captcha/validator/common/model/dto/Drives.java @@ -0,0 +1,18 @@ +package cloud.tianai.captcha.validator.common.model.dto; + +import lombok.Data; + +@Data +public class Drives { + private Integer hardwareConcurrency; + private Boolean hasXhr = false; + private String href; + private String language; + private Long start; + private Long now; + private String platform; + private Integer scripts; + private String userAgent; + private Integer windowHeight; + private Integer windowWidth; +} diff --git a/src/main/java/cloud/tianai/captcha/validator/common/model/dto/MatchParam.java b/src/main/java/cloud/tianai/captcha/validator/common/model/dto/MatchParam.java new file mode 100644 index 0000000..2e4f8b7 --- /dev/null +++ b/src/main/java/cloud/tianai/captcha/validator/common/model/dto/MatchParam.java @@ -0,0 +1,31 @@ +package cloud.tianai.captcha.validator.common.model.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: 天爱有情 + * @date 2024/8/19 15:12 + * @Description 验证码匹配的对象 + */ +@Data +@NoArgsConstructor +public class MatchParam { + /** 轨迹信息. */ + private ImageCaptchaTrack track; + /** 检测到的设备信息. */ + private Drives drives; + /** 留一个扩展属性. */ + private Object extendData; + + + public MatchParam(ImageCaptchaTrack track) { + this.track = track; + } + + public MatchParam(ImageCaptchaTrack track, Drives drives) { + this.track = track; + this.drives = drives; + } + +} diff --git a/src/main/java/cloud/tianai/captcha/validator/impl/BasicCaptchaTrackValidator.java b/src/main/java/cloud/tianai/captcha/validator/impl/BasicCaptchaTrackValidator.java index 28c3d81..8362ce1 100644 --- a/src/main/java/cloud/tianai/captcha/validator/impl/BasicCaptchaTrackValidator.java +++ b/src/main/java/cloud/tianai/captcha/validator/impl/BasicCaptchaTrackValidator.java @@ -16,7 +16,6 @@ import java.util.List; * @Description 基本的行为轨迹校验 */ public class BasicCaptchaTrackValidator extends SimpleImageCaptchaValidator { - public static final CodeDefinition DEFINITION = new CodeDefinition(50001, "basic check fail"); public BasicCaptchaTrackValidator() {