From 783164d8e7d5bdb6f68f6bf8ebd3928ddf842aec Mon Sep 17 00:00:00 2001 From: DaxPay Date: Tue, 11 Jun 2024 16:34:28 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=A2=9E=E5=8A=A0IP=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _doc/Task.md | 6 +---- .../common/core/validation/IpAddress.java | 26 +++++++++++++++++++ .../core/validation/IpAddressValidator.java | 26 +++++++++++++++++++ bootx-platform/pom.xml | 2 +- .../single/param/PaymentCommonParam.java | 2 ++ 5 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddress.java create mode 100644 bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddressValidator.java diff --git a/_doc/Task.md b/_doc/Task.md index 4c655335..5e22d48e 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -8,6 +8,7 @@ - [ ] DEMO增加获取微信OpenID和支付宝OpenId功能 - [ ] 支付宝微信等消息通知地址支持一键生成 - [ ] 管理端界面支持扫码绑定对账接收方功能 +- [ ] 请求IP参数增加正则校验 - [ ] 支付接口公共参数添加随机数字段, 预防重放问题 - [ ] 请求接口增加有效期校验, 一个请求十分钟后失效 - [x] 订单和扩展信息进行合并 @@ -51,10 +52,5 @@ - [ ] 同步接口 - [ ] 对账接口 **任务池** -- [ ] 通道费率计算 -- [ ] 每日资金流水计算 -- [ ] 微信消息通知相关配置 -- [ ] 钉钉消息通知配置 - [ ] 支付宝接口升级为V3接口 - [ ] 增加验签调试等功能的页面 -- [ ] 请求IP参数增加正则校验 diff --git a/bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddress.java b/bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddress.java new file mode 100644 index 00000000..126f5ac6 --- /dev/null +++ b/bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddress.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.common.core.validation; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * + * @author xxm + * @since 2024/6/11 + */ +@Target({ElementType.METHOD, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +// 标记由哪个类来执行校验逻辑,该类需要实现ConstraintValidator接口 +@Constraint(validatedBy = IpAddressValidator.class) +public @interface IpAddress { + + String message() default "IP地址不合法!"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddressValidator.java b/bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddressValidator.java new file mode 100644 index 00000000..89f8cea1 --- /dev/null +++ b/bootx-platform/bootx-common-core/src/main/java/cn/bootx/platform/common/core/validation/IpAddressValidator.java @@ -0,0 +1,26 @@ +package cn.bootx.platform.common.core.validation; + +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.StrUtil; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * ip地址校验器 + * @author xxm + * @since 2024/6/11 + */ +public class IpAddressValidator implements ConstraintValidator { + + /** + * 校验是否为IP地址。成功返回true,失败返回false + */ + @Override + public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) { + if (StrUtil.isNotBlank(str)){ + return Validator.isIpv4(str) || Validator.isIpv6(str); + } + return true; + } +} diff --git a/bootx-platform/pom.xml b/bootx-platform/pom.xml index 39834298..3565400a 100644 --- a/bootx-platform/pom.xml +++ b/bootx-platform/pom.xml @@ -41,7 +41,7 @@ 1.3.6.2 - 5.8.24 + 5.8.27 6.4.4 2.12.3 3.11 diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/PaymentCommonParam.java b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/PaymentCommonParam.java index 5ca4fb02..1be53251 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/PaymentCommonParam.java +++ b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/param/PaymentCommonParam.java @@ -1,6 +1,7 @@ package cn.daxpay.single.param; import cn.daxpay.single.serializer.TimestampToLocalDateTimeDeserializer; +import cn.bootx.platform.common.core.validation.IpAddress; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -19,6 +20,7 @@ public abstract class PaymentCommonParam { /** 客户端ip */ @Schema(description = "客户端ip") + @IpAddress private String clientIp; /** 签名 */