From 40555d917bec19eb4eb45e601d518a56c05135a9 Mon Sep 17 00:00:00 2001
From: lin <648540858@qq.com>
Date: Fri, 30 Jan 2026 06:14:58 +0800
Subject: [PATCH] =?UTF-8?q?redis=E5=A2=9E=E8=82=8C=E8=BF=9E=E6=8E=A5?=
=?UTF-8?q?=E6=B1=A0=E6=94=AF=E6=8C=81=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=AE=BE?=
=?UTF-8?q?=E5=A4=87=E5=9B=BD=E6=A0=87=E4=B8=A5=E6=A0=BC=E9=99=90=E5=88=B6?=
=?UTF-8?q?=E8=AE=BE=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 5 +++++
.../java/com/genersoft/iot/vmp/conf/UserSetting.java | 5 +++++
.../com/genersoft/iot/vmp/gb28181/bean/GbCode.java | 2 +-
.../event/request/impl/RegisterRequestProcessor.java | 12 ++++++++++++
4 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 5f7d0cbf7..4ce45891a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -405,6 +405,11 @@
1.18.2
+
+ org.apache.commons
+ commons-pool2
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
index 77beba74a..bf059acca 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
@@ -219,4 +219,9 @@ public class UserSetting {
*/
private boolean useAliasForGroupSync = false;
+ /**
+ * 设备ID严格模式,开启后设备注册时如果设备ID不符合规范则拒绝注册, 默认开启
+ */
+ private boolean deviceIdStrict = true;
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbCode.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbCode.java
index bc5e508ef..522e7e125 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbCode.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbCode.java
@@ -29,7 +29,7 @@ public class GbCode {
* 解析国标编号
*/
public static GbCode decode(String code){
- if (code == null || code.trim().length() != 20) {
+ if (code == null || code.trim().length() != 20 || !code.matches("\\d{20}")) {
return null;
}
code = code.trim();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
index 2653c3bd3..e1445cdd2 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.GbCode;
import com.genersoft.iot.vmp.gb28181.bean.GbSipDate;
import com.genersoft.iot.vmp.common.RemoteAddressInfo;
import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
@@ -88,6 +89,17 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
AddressImpl address = (AddressImpl) fromHeader.getAddress();
SipUri uri = (SipUri) address.getURI();
String deviceId = uri.getUser();
+ if (userSetting.isDeviceIdStrict()) {
+ // 严格模式下,非20位设备ID不予处理
+ GbCode decode = GbCode.decode(deviceId);
+ if (decode == null) {
+ // 注册失败
+ response = getMessageFactory().createResponse(Response.FORBIDDEN, request);
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
+ return;
+ }
+
+ }
// 调整逻辑,如果为设置公共密码,那么就必须要预设用户信息,否则无法注册。
Device device = deviceService.getDeviceByDeviceId(deviceId);