mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-11 23:25:33 +08:00
fix(risk): 海外IP检查 IPv6 直通放行, 修复 NetUtil.isInnerIP 对 IPv6 抛异常
This commit is contained in:
@@ -12,6 +12,7 @@ import cn.daxpay.open.plugin.risk.enums.PayBlacklistTypeEnum;
|
||||
import cn.daxpay.open.plugin.risk.enums.PayRiskHitPhaseEnum;
|
||||
import cn.daxpay.open.plugin.risk.service.PayBlacklistService;
|
||||
import cn.daxpay.open.plugin.risk.service.PayRiskHitService;
|
||||
import cn.hutool.core.lang.Validator;
|
||||
import cn.hutool.core.net.NetUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.github.benmanes.caffeine.cache.Cache;
|
||||
@@ -150,6 +151,10 @@ public class DefaultPayRiskChecker implements PayRiskChecker {
|
||||
if (StrUtil.isBlank(ip)) {
|
||||
return;
|
||||
}
|
||||
// IPv6 暂不参与网段判定, 直接放行(NetUtil.isInnerIP 仅支持 IPv4, 传入 IPv6 会抛异常)
|
||||
if (Validator.isIpv6(ip)) {
|
||||
return;
|
||||
}
|
||||
// 内网/回环地址直通放行(网络层判定, 不查库)
|
||||
if (NetUtil.isInnerIP(ip)) {
|
||||
return;
|
||||
|
||||
@@ -128,6 +128,24 @@ class DefaultPayRiskCheckerTest {
|
||||
verifyNoInteractions(payRiskHitService);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("海外检查: IPv6 回环直通放行(NetUtil.isInnerIP 仅支持 IPv4, 传入 IPv6 会抛异常)")
|
||||
void overseasIp_ipv6Loopback_shouldPassThroughWithoutLookup() {
|
||||
assertDoesNotThrow(() -> checker.checkBeforePay(overseasCtx("::1")));
|
||||
|
||||
verify(ipToRegionService, never()).getRegionByIp(anyString());
|
||||
verifyNoInteractions(payRiskHitService);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("海外检查: IPv6 公网地址直通放行")
|
||||
void overseasIp_ipv6Public_shouldPassThroughWithoutLookup() {
|
||||
assertDoesNotThrow(() -> checker.checkBeforePay(overseasCtx("2409:8a20:210:0:0:0:0:1")));
|
||||
|
||||
verify(ipToRegionService, never()).getRegionByIp(anyString());
|
||||
verifyNoInteractions(payRiskHitService);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("海外检查: xdb 查询失败(region=null)放行不记录")
|
||||
void overseasIp_lookupReturnsNull_shouldPass() {
|
||||
|
||||
Reference in New Issue
Block a user