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);