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