diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
new file mode 100644
index 0000000..bebd327
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
Binary files differ
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
new file mode 100644
index 0000000..bebd327
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
Binary files differ
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
new file mode 100644
index 0000000..ada993c
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
@@ -0,0 +1,29 @@
+#请求消息队列URL
+receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets
+#证书库路径
+receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
+receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA==
+#队列名(注册后由统一身份反馈)
+receive.msg.url.param.queuename=sinopec_375
+#用户名(注册后由统一身份反馈)
+receive.msg.url.param.username=sinopec_375
+#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用)
+receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg==
+
+#每次批量下拉事件的数目
+receive.msg.url.param.size=10
+
+#调度执行时间间隔,单位:毫秒
+timer.interval=1200000
+
+#调度重试时间间隔,单位:毫秒
+timer.retry=60000
+
+#链接打开超时时间,单位:毫秒
+receive.msg.url.param.connecttimeout=300000
+#链接读取超时时间,单位:毫秒
+receive.msg.url.param.readtimeout=300000
+
+
+sinopec.siam.version= V3.4
+sinopec.siam.releasedate= 2024-08-29
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
new file mode 100644
index 0000000..bebd327
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
Binary files differ
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
new file mode 100644
index 0000000..ada993c
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
@@ -0,0 +1,29 @@
+#请求消息队列URL
+receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets
+#证书库路径
+receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
+receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA==
+#队列名(注册后由统一身份反馈)
+receive.msg.url.param.queuename=sinopec_375
+#用户名(注册后由统一身份反馈)
+receive.msg.url.param.username=sinopec_375
+#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用)
+receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg==
+
+#每次批量下拉事件的数目
+receive.msg.url.param.size=10
+
+#调度执行时间间隔,单位:毫秒
+timer.interval=1200000
+
+#调度重试时间间隔,单位:毫秒
+timer.retry=60000
+
+#链接打开超时时间,单位:毫秒
+receive.msg.url.param.connecttimeout=300000
+#链接读取超时时间,单位:毫秒
+receive.msg.url.param.readtimeout=300000
+
+
+sinopec.siam.version= V3.4
+sinopec.siam.releasedate= 2024-08-29
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
new file mode 100644
index 0000000..ab40229
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
@@ -0,0 +1,41 @@
+package com.sinopec.siam.provisioning.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import com.sinopec.siam.apache.log4j.Logger;
+
+public class InitFilter implements Filter{
+ /** Class logger. */
+ private final Logger log = Logger.getLogger(InitFilter.class);
+ public void init(FilterConfig filterConfig) throws ServletException {
+ // TODO Auto-generated method stub
+ log.info("================>[Filter]准备开始接收消息");
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener());
+ try{
+ provisioningEventSubscriberTimer.start();
+ log.info("================>[Filter]自动开始接收消息.");
+ }catch(IllegalThreadStateException e){
+ }
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void destroy() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
new file mode 100644
index 0000000..bebd327
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
Binary files differ
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
new file mode 100644
index 0000000..ada993c
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
@@ -0,0 +1,29 @@
+#请求消息队列URL
+receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets
+#证书库路径
+receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
+receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA==
+#队列名(注册后由统一身份反馈)
+receive.msg.url.param.queuename=sinopec_375
+#用户名(注册后由统一身份反馈)
+receive.msg.url.param.username=sinopec_375
+#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用)
+receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg==
+
+#每次批量下拉事件的数目
+receive.msg.url.param.size=10
+
+#调度执行时间间隔,单位:毫秒
+timer.interval=1200000
+
+#调度重试时间间隔,单位:毫秒
+timer.retry=60000
+
+#链接打开超时时间,单位:毫秒
+receive.msg.url.param.connecttimeout=300000
+#链接读取超时时间,单位:毫秒
+receive.msg.url.param.readtimeout=300000
+
+
+sinopec.siam.version= V3.4
+sinopec.siam.releasedate= 2024-08-29
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
new file mode 100644
index 0000000..ab40229
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
@@ -0,0 +1,41 @@
+package com.sinopec.siam.provisioning.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import com.sinopec.siam.apache.log4j.Logger;
+
+public class InitFilter implements Filter{
+ /** Class logger. */
+ private final Logger log = Logger.getLogger(InitFilter.class);
+ public void init(FilterConfig filterConfig) throws ServletException {
+ // TODO Auto-generated method stub
+ log.info("================>[Filter]准备开始接收消息");
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener());
+ try{
+ provisioningEventSubscriberTimer.start();
+ log.info("================>[Filter]自动开始接收消息.");
+ }catch(IllegalThreadStateException e){
+ }
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void destroy() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
new file mode 100644
index 0000000..8f2a803
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
@@ -0,0 +1,53 @@
+/**
+ *
+ */
+package com.sinopec.siam.provisioning.handle;
+
+import com.casic.missiles.core.util.SpringContextHolder;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import com.sinopec.siam.provisioning.listener.ProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+/**
+ * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。
+ *
+ * @author zhaodonglu
+ * @since 2012-7-23 下午2:00:17
+ */
+@Slf4j
+public class SimpleProvisioningEventListener implements ProvisioningEventListener {
+
+ /**
+ *
+ */
+ public SimpleProvisioningEventListener() {
+ super();
+ }
+
+ public void process(ProvisioningEvents events) {
+ ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class);
+ if (service == null) {
+ log.error("ISyncProvisionService is null");
+ }
+ // TODO Auto-generated method stub
+ service.loadData(events);
+
+ }
+
+ public static void main(String[] args) {
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer
+ .getInstance(new SimpleProvisioningEventListener());
+ try {
+ provisioningEventSubscriberTimer.start();
+ } catch (IllegalThreadStateException e) {
+ }
+ }
+
+}
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
new file mode 100644
index 0000000..bebd327
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
Binary files differ
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
new file mode 100644
index 0000000..ada993c
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
@@ -0,0 +1,29 @@
+#请求消息队列URL
+receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets
+#证书库路径
+receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
+receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA==
+#队列名(注册后由统一身份反馈)
+receive.msg.url.param.queuename=sinopec_375
+#用户名(注册后由统一身份反馈)
+receive.msg.url.param.username=sinopec_375
+#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用)
+receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg==
+
+#每次批量下拉事件的数目
+receive.msg.url.param.size=10
+
+#调度执行时间间隔,单位:毫秒
+timer.interval=1200000
+
+#调度重试时间间隔,单位:毫秒
+timer.retry=60000
+
+#链接打开超时时间,单位:毫秒
+receive.msg.url.param.connecttimeout=300000
+#链接读取超时时间,单位:毫秒
+receive.msg.url.param.readtimeout=300000
+
+
+sinopec.siam.version= V3.4
+sinopec.siam.releasedate= 2024-08-29
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
new file mode 100644
index 0000000..ab40229
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
@@ -0,0 +1,41 @@
+package com.sinopec.siam.provisioning.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import com.sinopec.siam.apache.log4j.Logger;
+
+public class InitFilter implements Filter{
+ /** Class logger. */
+ private final Logger log = Logger.getLogger(InitFilter.class);
+ public void init(FilterConfig filterConfig) throws ServletException {
+ // TODO Auto-generated method stub
+ log.info("================>[Filter]准备开始接收消息");
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener());
+ try{
+ provisioningEventSubscriberTimer.start();
+ log.info("================>[Filter]自动开始接收消息.");
+ }catch(IllegalThreadStateException e){
+ }
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void destroy() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
new file mode 100644
index 0000000..8f2a803
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
@@ -0,0 +1,53 @@
+/**
+ *
+ */
+package com.sinopec.siam.provisioning.handle;
+
+import com.casic.missiles.core.util.SpringContextHolder;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import com.sinopec.siam.provisioning.listener.ProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+/**
+ * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。
+ *
+ * @author zhaodonglu
+ * @since 2012-7-23 下午2:00:17
+ */
+@Slf4j
+public class SimpleProvisioningEventListener implements ProvisioningEventListener {
+
+ /**
+ *
+ */
+ public SimpleProvisioningEventListener() {
+ super();
+ }
+
+ public void process(ProvisioningEvents events) {
+ ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class);
+ if (service == null) {
+ log.error("ISyncProvisionService is null");
+ }
+ // TODO Auto-generated method stub
+ service.loadData(events);
+
+ }
+
+ public static void main(String[] args) {
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer
+ .getInstance(new SimpleProvisioningEventListener());
+ try {
+ provisioningEventSubscriberTimer.start();
+ } catch (IllegalThreadStateException e) {
+ }
+ }
+
+}
diff --git a/casic-web/src/main/resources/conf/sp-simple-config.properties b/casic-web/src/main/resources/conf/sp-simple-config.properties
index 9e647ef..1200c3d 100644
--- a/casic-web/src/main/resources/conf/sp-simple-config.properties
+++ b/casic-web/src/main/resources/conf/sp-simple-config.properties
@@ -80,9 +80,9 @@
#sp.metadata.ts.download.url+sp.metadata.url+sp.metadata.url.entityId???metadata????
#sp.metadata.backUpPath?idp.metadata.backUpPath?metadata????????
sp.metadata.url=/ts/services/restful/topology/publisher/getEntityDescriptorByEntityID?entityID=
-sp.metadata.backUpPath=classpath:sp-metadata.xml
+sp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\sp-metadata.xml
idp.metadata.url=/ts/services/restful/topology/publisher/getIdPEntitiesDescriptor
-idp.metadata.backUpPath=classpath:idp-metadata-all.xml
+idp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\idp-metadata-all.xml
#------------------------------------------------------------------------------------
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
new file mode 100644
index 0000000..bebd327
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
Binary files differ
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
new file mode 100644
index 0000000..ada993c
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
@@ -0,0 +1,29 @@
+#请求消息队列URL
+receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets
+#证书库路径
+receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
+receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA==
+#队列名(注册后由统一身份反馈)
+receive.msg.url.param.queuename=sinopec_375
+#用户名(注册后由统一身份反馈)
+receive.msg.url.param.username=sinopec_375
+#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用)
+receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg==
+
+#每次批量下拉事件的数目
+receive.msg.url.param.size=10
+
+#调度执行时间间隔,单位:毫秒
+timer.interval=1200000
+
+#调度重试时间间隔,单位:毫秒
+timer.retry=60000
+
+#链接打开超时时间,单位:毫秒
+receive.msg.url.param.connecttimeout=300000
+#链接读取超时时间,单位:毫秒
+receive.msg.url.param.readtimeout=300000
+
+
+sinopec.siam.version= V3.4
+sinopec.siam.releasedate= 2024-08-29
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
new file mode 100644
index 0000000..ab40229
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
@@ -0,0 +1,41 @@
+package com.sinopec.siam.provisioning.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import com.sinopec.siam.apache.log4j.Logger;
+
+public class InitFilter implements Filter{
+ /** Class logger. */
+ private final Logger log = Logger.getLogger(InitFilter.class);
+ public void init(FilterConfig filterConfig) throws ServletException {
+ // TODO Auto-generated method stub
+ log.info("================>[Filter]准备开始接收消息");
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener());
+ try{
+ provisioningEventSubscriberTimer.start();
+ log.info("================>[Filter]自动开始接收消息.");
+ }catch(IllegalThreadStateException e){
+ }
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void destroy() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
new file mode 100644
index 0000000..8f2a803
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
@@ -0,0 +1,53 @@
+/**
+ *
+ */
+package com.sinopec.siam.provisioning.handle;
+
+import com.casic.missiles.core.util.SpringContextHolder;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import com.sinopec.siam.provisioning.listener.ProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+/**
+ * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。
+ *
+ * @author zhaodonglu
+ * @since 2012-7-23 下午2:00:17
+ */
+@Slf4j
+public class SimpleProvisioningEventListener implements ProvisioningEventListener {
+
+ /**
+ *
+ */
+ public SimpleProvisioningEventListener() {
+ super();
+ }
+
+ public void process(ProvisioningEvents events) {
+ ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class);
+ if (service == null) {
+ log.error("ISyncProvisionService is null");
+ }
+ // TODO Auto-generated method stub
+ service.loadData(events);
+
+ }
+
+ public static void main(String[] args) {
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer
+ .getInstance(new SimpleProvisioningEventListener());
+ try {
+ provisioningEventSubscriberTimer.start();
+ } catch (IllegalThreadStateException e) {
+ }
+ }
+
+}
diff --git a/casic-web/src/main/resources/conf/sp-simple-config.properties b/casic-web/src/main/resources/conf/sp-simple-config.properties
index 9e647ef..1200c3d 100644
--- a/casic-web/src/main/resources/conf/sp-simple-config.properties
+++ b/casic-web/src/main/resources/conf/sp-simple-config.properties
@@ -80,9 +80,9 @@
#sp.metadata.ts.download.url+sp.metadata.url+sp.metadata.url.entityId???metadata????
#sp.metadata.backUpPath?idp.metadata.backUpPath?metadata????????
sp.metadata.url=/ts/services/restful/topology/publisher/getEntityDescriptorByEntityID?entityID=
-sp.metadata.backUpPath=classpath:sp-metadata.xml
+sp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\sp-metadata.xml
idp.metadata.url=/ts/services/restful/topology/publisher/getIdPEntitiesDescriptor
-idp.metadata.backUpPath=classpath:idp-metadata-all.xml
+idp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\idp-metadata-all.xml
#------------------------------------------------------------------------------------
diff --git a/casic-web/src/main/resources/config/application-dm.yml b/casic-web/src/main/resources/config/application-dm.yml
index 2b255ae..8fa0c2f 100644
--- a/casic-web/src/main/resources/config/application-dm.yml
+++ b/casic-web/src/main/resources/config/application-dm.yml
@@ -3,10 +3,10 @@
################### spring配置 ###################
spring:
datasource:
- url: jdbc:dm://10.80.1.157:5236/schema=XLJC?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
+ url: jdbc:dm://111.198.10.15:11211/SMARTWELL
driver-class-name: dm.jdbc.driver.DmDriver
- username: XLJC
- password: Xljc@2023
+ username: SMARTWELL
+ password: Casic203!
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
@@ -47,7 +47,7 @@
casic:
kaptcha-open: false #是否开启登录时验证码 (true/false)
#kaptcha-open: false #是否开启登录时验证码 (true/false)
- no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token
+ no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token,/route/token
db:
init:
enable: false
@@ -73,9 +73,10 @@
appKey: 5cV2rugxAb8o28WK6RSFU6
masterSecret: fQsKrOaFZy5tvKb3Vd3vv5
logging:
- level:
- root: info
- com.casic: debug
+ level.root: info
+ level.com.casic: debug
+ level.com.sinopec.siam.agent.sp.config: debug
+ level.com.sinopec: debug
file:
path: logs/
name: missiles.log
diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml
index 26a0d27..35b55da 100644
--- a/casic-alarm/pom.xml
+++ b/casic-alarm/pom.xml
@@ -97,6 +97,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
index 066986a..1bd73df 100644
--- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
+++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmJobController.java
@@ -19,7 +19,6 @@
import com.casic.missiles.modular.alarm.service.ISysDictService;
import com.casic.missiles.modular.system.enums.DeviceExportEnum;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
diff --git a/casic-device/pom.xml b/casic-device/pom.xml
index 00f55fd..6a8325d 100644
--- a/casic-device/pom.xml
+++ b/casic-device/pom.xml
@@ -35,6 +35,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
org.springframework.boot
diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
index e4f137c..ea56159 100644
--- a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
+++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceModelsServiceImpl.java
@@ -10,7 +10,6 @@
import com.casic.missiles.modular.system.model.DeviceType;
import com.casic.missiles.modular.system.service.IDeviceModelsService;
import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.util.StringUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
diff --git a/casic-server-support/pom.xml b/casic-server-support/pom.xml
index 3054996..a42532f 100644
--- a/casic-server-support/pom.xml
+++ b/casic-server-support/pom.xml
@@ -45,6 +45,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index e973f0e..6adbc15 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -29,6 +29,7 @@
${admin.version}
provided
+
org.springframework.boot
spring-boot-starter-web
diff --git a/casic-sluicewell/pom.xml b/casic-sluicewell/pom.xml
index 08fd42a..cc7cb17 100644
--- a/casic-sluicewell/pom.xml
+++ b/casic-sluicewell/pom.xml
@@ -28,6 +28,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
@@ -43,6 +53,16 @@
com.casic
casic-server-support
${pro.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
diff --git a/casic-web/lib/mvn.txt b/casic-web/lib/mvn.txt
new file mode 100644
index 0000000..f3fd222
--- /dev/null
+++ b/casic-web/lib/mvn.txt
@@ -0,0 +1 @@
+mvn install:install-file -Dfile=siam-am-agent-simple-3.3.RELEASE.jar -DgroupId=com.aspose -DartifactId=siam-am-agent-simple -Dversion=3.3.RELEASE -Dpackaging=jar
\ No newline at end of file
diff --git "a/casic-web/lib/\351\227\256\351\242\230" "b/casic-web/lib/\351\227\256\351\242\230"
new file mode 100644
index 0000000..379f1f8
--- /dev/null
+++ "b/casic-web/lib/\351\227\256\351\242\230"
@@ -0,0 +1,2 @@
+sp.metadata.backUpPath 写绝对路径
+idp.metadata.backUpPath 写绝对路径
\ No newline at end of file
diff --git a/casic-web/pom.xml b/casic-web/pom.xml
index 178eeaa..7148645 100644
--- a/casic-web/pom.xml
+++ b/casic-web/pom.xml
@@ -53,6 +53,12 @@
com.sinopec
siam-am-agent-simple
3.3.RELEASE
+
+
+
+
+
+
system
${project.basedir}/lib/siam-am-agent-simple-3.3.RELEASE.jar
@@ -78,6 +84,16 @@
com.casic
casic-export-support
${extension.version}
+
+
+ org.apache.poi
+ poi-ooxml
+
+
+ org.apache.poi
+ poi
+
+
com.casic
@@ -163,9 +179,17 @@
org.springframework.boot
spring-boot-starter-test
+
+
- org.postgresql
- postgresql
+ com.sinopec
+ siam-provisioning-subscriber-clients
+ 3.3.RELEASE
+
+
+ org.xml
+ xml-apis
+ 1.0.b2
@@ -221,9 +245,14 @@
com.casic.missiles.CasicApplication
- true
./
+ true
+
+
+
+ ./siam-am-agent-simple-3.3.RELEASE.jar
+
@@ -236,7 +265,7 @@
make-assembly
package
- single
+
@@ -246,6 +275,14 @@
maven-war-plugin
${maven.war.plugin.version}
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+ true
+
+
@@ -258,6 +295,13 @@
true
+
+ src/main/java
+
+ com/sinopec/siam/conf/**/*.properties
+ com/sinopec/siam/conf/**/*.jks
+
+
\ No newline at end of file
diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml
index 2854773..4ab45eb 100644
--- a/casic-web/src/main/build/package.xml
+++ b/casic-web/src/main/build/package.xml
@@ -12,6 +12,12 @@
true
true
lib
+ system
+
+
+ true
+ true
+ lib
runtime
@@ -44,6 +50,14 @@
/conf
+ src/main/resources/certs
+ true
+
+ *
+
+ /certs
+
+
src/main/resources/i18n
/
diff --git a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
index 5c37ce8..3a38657 100644
--- a/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
+++ b/casic-web/src/main/java/com/casic/missiles/config/CasFilterConfig.java
@@ -4,6 +4,7 @@
import com.sinopec.siam.agent.common.ContextHolder;
import com.sinopec.siam.agent.web.AccessEnforcer;
import com.sinopec.siam.agent.web.SAMLProfileFilter;
+import com.sinopec.siam.provisioning.filter.InitFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
@@ -47,6 +48,21 @@
}
/**
+ * @return 登录过滤器
+ */
+ @Bean
+ public FilterRegistrationBean registerMqFilter() {
+ FilterRegistrationBean registration = new FilterRegistrationBean();
+ InitFilter initFilter = new InitFilter();
+ registration.setFilter(initFilter);
+ registration.addUrlPatterns("/");
+ registration.setName("com.sinopec.siam.provisioning.filter.InitFilter");
+ //值越小,Filter越靠前。
+ registration.setOrder(0);
+ return registration;
+ }
+
+ /**
*
* @return 认证过滤器
*/
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
new file mode 100644
index 0000000..b41bafd
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlDeptDTO.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlDeptDTO {
+ /**
+ * 组织编码
+ */
+ private String ou;
+
+ /**
+ * 组织名称
+ */
+ private String cn;
+
+ /**
+ * 上级组织编码
+ */
+ private String spSupervisoryDepartment;
+
+ /**
+ * 组织状态
+ */
+ private String spEntryStatus;
+ private String delFlag;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
new file mode 100644
index 0000000..7d980a7
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/dto/SamlUserDTO.java
@@ -0,0 +1,31 @@
+package com.casic.missiles.modular.system.dto;
+
+import lombok.Data;
+
+@Data
+public class SamlUserDTO {
+ /**
+ * 用户账号
+ */
+ private String uid;
+ /**
+ * 姓名
+ */
+ private String cn;
+
+ /**
+ * 用户直属组织编码
+ */
+ private String sporgnumber;
+
+ /**
+ * 账号状态
+ */
+ private String spentrystatus;
+
+ /**
+ * 用户状态
+ * 1 启用 2 冻结 3删除
+ */
+ private String status;
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
new file mode 100644
index 0000000..4bea3cf
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/ISyncProvisionService.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.service;
+
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.sinopec.siam.provisioning.entity.ProvisioningEvents;
+
+public interface ISyncProvisionService {
+ void saveOrUpdateUser(SamlUserDTO user,User oldUser);
+ void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept);
+ void loadData(ProvisioningEvents events);
+}
diff --git a/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
new file mode 100644
index 0000000..d9a0d87
--- /dev/null
+++ b/casic-web/src/main/java/com/casic/missiles/modular/system/service/impl/SyncProvisionServiceImpl.java
@@ -0,0 +1,540 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.casic.missiles.core.application.service.AbstractDeptService;
+import com.casic.missiles.core.application.service.AbstractUserService;
+import com.casic.missiles.core.shiro.ShiroKit;
+import com.casic.missiles.modular.interfaces.enums.ManagerStatus;
+import com.casic.missiles.modular.system.dto.SamlDeptDTO;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.model.Dept;
+import com.casic.missiles.modular.system.model.User;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class SyncProvisionServiceImpl implements ISyncProvisionService {
+ private final AbstractDeptService deptService;
+ private final AbstractUserService userService;
+ private final JdbcTemplate jdbcTemplate;
+ public SyncProvisionServiceImpl(AbstractDeptService deptService, AbstractUserService userService, JdbcTemplate jdbcTemplate) {
+ this.deptService = deptService;
+ this.userService = userService;
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ /**
+ * 创建默认用户信息
+ *
+ * @return
+ */
+ private User createDefaultUser() {
+ User user = new User();
+ user.setDelFlag("0");
+ user.setIsSync(1);
+// user.setIsSys("0");
+ // 完善账号信息
+ user.setSalt(ShiroKit.getRandomSalt(5));
+ //同步随机密码添加
+ user.setPassword(ShiroKit.md5(ShiroKit.getRandomSalt(7), user.getSalt()));
+ user.setStatus(ManagerStatus.OK.getCode());
+ user.setUpdateTime(new Date());
+ user.setCreateTime(new Date());
+ return user;
+ }
+
+ @Value("${casic.defaultDeptType:03}")
+ private String defaultDept;
+
+ /**
+ * 创建组织默认信息
+ * @return
+ */
+ private Dept createDefaultDept() {
+ //创建组织信息
+ Dept dept = new Dept();
+ dept.setDelFlag("0");
+ dept.setIsSync(1);
+ dept.setCreateUser(1L);
+ dept.setUpdateUser(1L);
+ dept.setCreateTime(new Date());
+ dept.setUpdateTime(new Date());
+ dept.setDeptType(defaultDept);
+ dept.setPid(0L);
+ dept.setPids("[0]");
+
+ dept.setNum(0);
+ dept.setIsParent("0");
+ return dept;
+ }
+
+ @Override
+ public void saveOrUpdateUser(SamlUserDTO user, User oldUser) {
+ if (oldUser == null) {
+ oldUser = createDefaultUser();
+ }
+ //设置账号
+ if (StrUtil.isNotEmpty(user.getUid())) {
+ oldUser.setAccount(user.getUid());
+ oldUser.setSyncId(user.getUid());
+ }
+ //设置名称
+ if (StrUtil.isNotEmpty(user.getCn())) {
+ oldUser.setName(user.getCn());
+ }
+
+ //设置同步组织
+ if(StrUtil.isNotEmpty(user.getSporgnumber())){
+ oldUser.setSyncDeptid(user.getSporgnumber());
+ }
+ //处理账号状态
+ oldUser.setStatus(user.getStatus());
+ if ("3".equals(user.getStatus())) {
+ oldUser.setDelFlag("1");
+ oldUser.setStatus("3");
+ } else {
+ oldUser.setDelFlag("0");
+ }
+ oldUser.setUpdateTime(new Date());
+ userService.saveOrUpdate(oldUser);
+ }
+
+ @Override
+ public void saveOrUpdateDept(SamlDeptDTO deptDTO, Dept oldDept) {
+ if (oldDept == null) {
+ oldDept = createDefaultDept();
+ }
+
+ if(StrUtil.isNotEmpty(deptDTO.getCn())) {
+ oldDept.setFullName(deptDTO.getCn());
+ oldDept.setSimpleName(deptDTO.getCn());
+ }
+ oldDept.setDelFlag(deptDTO.getDelFlag());
+ oldDept.setSyncId(deptDTO.getOu());
+ oldDept.setSyncPid(deptDTO.getSpSupervisoryDepartment());
+ oldDept.setUpdateTime(new Date());
+ deptService.saveOrUpdate(oldDept);
+ }
+
+ @Transactional
+ @Override
+ public void loadData(ProvisioningEvents events) {
+ log.info("sync user start.....");
+
+ LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>();
+ deptQuery.isNotNull(Dept::getSyncId);
+ List deptList = deptService.list(deptQuery);
+ Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>();
+ userQuery.isNotNull(User::getSyncId);
+ List users = userService.list(userQuery);
+ Map userMap = users.stream().collect(Collectors.toMap(User::getSyncId, (user -> user)));
+
+ List list = events.getEvent();
+ for (int i = 0; i < list.size(); i++) {
+ ProvisioningEvent event = new ProvisioningEvent();
+ event = list.get(i);
+ SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("监听到事件内容如下:");
+ log.info("事件流水号:" + event.getEventId());
+ if (event.getOccuredTimestamp() == null) {
+ log.info("事件发生时间:null");
+ } else {
+ log.info("事件发生时间:" + time.format(event.getOccuredTimestamp().getTime()));
+ }
+ log.info("事件类型:" + event.getEventType());
+
+ /**
+ * 应用账号创建
+ */
+ SamlUserDTO samlUserDTO = new SamlUserDTO();
+ if (EventType.ACCOUNT_CREATED.equals(event.getEventType())) {
+ String account_uid = "";
+ //用户账号
+ String uid = "";
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号修改
+ */
+ if (EventType.ACCOUNT_MODIFIED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+ String cn = "";//姓名
+ String ou = "";//部门
+ String employeenumber = "";//员工编码
+ String sporgnumber = "";//直属部门编码
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ log.info("应用账号属性集合:");
+ List attributes = targetEntity.getAttributes();
+ for (Attribute attribute : attributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("姓名:" + cn);
+ }
+ if (attribute.getName().equals("employeenumber")) {
+ employeenumber = (String) attribute.getValues().get(0);
+ log.info("员工编码:" + employeenumber);
+ }
+ if (attribute.getName().equals("ou")) {
+ ou = (String) attribute.getValues().get(0);
+ log.info("部门:" + ou);
+ }
+ if (attribute.getName().equals("sporgnumber")) {
+ sporgnumber = (String) attribute.getValues().get(0);
+ log.info("直属部门编码:" + employeenumber);
+ }
+ }
+ // log.info(attribute);
+ // 其他属性取值,自己编写代码
+
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setCn(cn);
+ samlUserDTO.setSporgnumber(sporgnumber);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号禁用
+ */
+ if (EventType.ACCOUNT_DISABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("2");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号启用
+ */
+ if (EventType.ACCOUNT_ENABLED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("1");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 应用账号删除
+ */
+ if (EventType.ACCOUNT_DELETED.equals(event.getEventType())) {
+
+ String account_uid = "";//应用账号
+ String uid = "";//用户账号
+ String app_name = "";//应用名称
+
+ TargetEntity applicationEntity = event.getApplication();
+ if (applicationEntity != null) {
+ TargetSubject applicationSubject = applicationEntity.getSubject();
+ app_name = applicationSubject.getSubject();
+ log.info("应用系统:" + app_name);
+ }
+ TargetEntity personEntity = event.getPerson();
+ if (personEntity != null) {
+ TargetSubject personSubject = personEntity.getSubject();
+ uid = personSubject.getSubject();
+ log.info("用户账号:" + uid);
+ }
+ TargetEntity targetEntity = event.getTargetEntity();
+ if (targetEntity != null) {
+ TargetSubject targetSubject = targetEntity.getSubject();
+ account_uid = targetSubject.getSubject();
+ log.info("应用账号:" + account_uid);
+ }
+ samlUserDTO.setUid(uid);
+ samlUserDTO.setStatus("3");
+ this.saveOrUpdateUser(samlUserDTO, userMap.get(uid));
+ }
+ /**
+ * 组织机构创建
+ */
+ if (EventType.ORGUNIT_CREATED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+
+ }
+ /**
+ * 组织机构修改
+ */
+ if (EventType.ORGUNIT_MODIFIED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("0");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+
+ }
+ /**
+ * 组织机构删除
+ */
+ if (EventType.ORGUNIT_DELETED.equals(event.getEventType())) {
+
+ String ou = "";//组织编码
+ String cn = "";//组织名称
+ String spOrgLevel = "";//组织层级
+ String spSupervisoryDepartment = "";//组织上级编码
+ String spOuType = "";//组织类型,0:HR机构,1:非HR机构
+
+ TargetEntity originalEntity = event.getTargetEntity();
+ if (originalEntity != null) {
+ TargetSubject originalSubject = originalEntity.getSubject();
+ ou = originalSubject.getSubject();
+ log.info("组织编码:" + ou);
+ List originalAttributes = originalEntity.getAttributes();
+ log.info("组织机构属性集合:");
+ for (Attribute attribute : originalAttributes) {
+ if (attribute.getName().equals("cn")) {
+ cn = (String) attribute.getValues().get(0);
+ log.info("组织名称:" + cn);
+ }
+ if (attribute.getName().equals("spOrgLevel")) {
+ spOrgLevel = (String) attribute.getValues().get(0);
+ log.info("组织层级:" + spOrgLevel);
+ }
+ if (attribute.getName().equals("spSupervisoryDepartment")) {
+ spSupervisoryDepartment = (String) attribute.getValues().get(0);
+ log.info("组织上级编码:" + spSupervisoryDepartment);
+ }
+ if (attribute.getName().equals("spOuType")) {
+ spOuType = (String) attribute.getValues().get(0);
+ log.info("组织类型:" + spOuType);
+ }
+
+ //log.info(attribute);
+ // 其他属性取值,自己编写代码
+ }
+ SamlDeptDTO samlDeptDTO = new SamlDeptDTO();
+ samlDeptDTO.setCn(cn);
+ samlDeptDTO.setOu(ou);
+ samlDeptDTO.setSpSupervisoryDepartment(spSupervisoryDepartment);
+ samlDeptDTO.setDelFlag("1");
+ this.saveOrUpdateDept(samlDeptDTO, deptMap.get(ou));
+ }
+ }
+
+ }
+
+ jdbcTemplate.update("update sys_user a set dept_id = (select id from sys_dept b where b.SYNC_ID = a.SYNC_DEPTID ) where a.IS_SYNC = 1");
+
+ //更新父组织ID
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.isNotNull(Dept::getSyncId);
+ List oldDeptList = deptService.list(query);
+ query.ne(Dept::getPid, -1);
+ deptMap = oldDeptList.stream().collect(Collectors.toMap(Dept::getSyncId, (dept -> dept)));
+ for (Dept dept : oldDeptList) {
+ if (deptMap.containsKey(dept.getSyncPid())) {
+ dept.setPid(deptMap.get(dept.getSyncPid()).getId());
+ deptService.saveOrUpdate(dept);
+ }
+ }
+
+ //刷新PIDS层级结构
+ deptService.reloadPidsByPid(0);
+ }
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
new file mode 100644
index 0000000..3dfde69
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq-Log4j.properties
@@ -0,0 +1,67 @@
+#??????
+#??1?????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+log4j.rootLogger=ERROR,C3
+#??2??????????????????
+#DEBUG,INFO,ERROR,?????????INFO?ERROR
+#log4j.rootLogger=DEBUG,R
+
+
+### \u5e94\u7528\u4e8e\u63a7\u5236\u53f0
+
+log4j.appender.A1=com.sinopec.siam.apache.log4j.ConsoleAppender
+log4j.appender.A1.Threshold=ERROR
+log4j.appender.A1.Target=System.out
+log4j.appender.A1.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+#log4j.appender.A1.logfile.File=d:/siamlogs/a.log
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+
+
+#\u5e94\u7528\u4e8e\u6587\u4ef6
+
+#log4j.appender.B2=org.apache.log4j.FileAppender
+#log4j.appender.B2.Threshold=WARN
+#log4j.appender.B2.File=logs/hrcpom_ERROR.log
+#log4j.appender.B2.Append=false
+#log4j.appender.B2.layout=org.apache.log4j.PatternLayout
+#log4j.appender.B2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\\\:mm\\\:ss}\\\: %c %m%n
+
+
+
+
+#\u5468\u671f\u6027\u751f\u6210\u65e5\u5fd7
+#\u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6
+# 1)'.'yyyy-MM: \u6bcf\u6708
+# 2)'.'yyyy-ww: \u6bcf\u5468
+# 3)'.'yyyy-MM-dd: \u6bcf\u5929
+# 4)'.'yyyy-MM-dd-a: \u6bcf\u5929\u4e24\u6b21
+# 5)'.'yyyy-MM-dd-HH: \u6bcf\u5c0f\u65f6
+# 6)'.'yyyy-MM-dd-HH-mm: \u6bcf\u5206\u949f
+
+org.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3=com.sinopec.siam.apache.log4j.DailyRollingFileAppender
+log4j.appender.C3.Threshold=ERROR
+#log4j.appender.C3.File=logs/server1/sipc_sso.log
+log4j.appender.C3.File=d:/siamlogs-mq/mq.log
+log4j.appender.C3.Encoding=utf-8
+log4j.appender.C3.DatePattern='.'yyyy-MM-dd
+log4j.appender.C3.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.C3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
+
+
+
+
+# ???????
+log4j.appender.R=com.sinopec.siam.apache.log4j.RollingFileAppender
+log4j.appender.R.Threshold=ERROR
+log4j.appender.R.File=${catalina.home}/logs/saml_authR.log
+log4j.appender.R.Append=true
+#?????????
+log4j.appender.R.MaxFileSize=100MB
+#???????????
+log4j.appender.R.MaxBackupIndex=10
+log4j.appender.R.layout=com.sinopec.siam.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS}\:%c[%M][line\:%L] %m%n
+
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
new file mode 100644
index 0000000..bebd327
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
Binary files differ
diff --git a/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
new file mode 100644
index 0000000..ada993c
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/conf/mq4siam.properties
@@ -0,0 +1,29 @@
+#请求消息队列URL
+receive.msg.url.base=https://mqs.uat.siam.sinopec.com/siam-provisioning-receive/ReceiveServlets
+#证书库路径
+receive.msg.url.keystore.path=/com/sinopec/siam/conf/mq.siam.sinopec.com.jks
+receive.msg.url.keystore.pwd=fdR96f3lyHRRjLaNnhEbhA==
+#队列名(注册后由统一身份反馈)
+receive.msg.url.param.queuename=sinopec_375
+#用户名(注册后由统一身份反馈)
+receive.msg.url.param.username=sinopec_375
+#密码(注册后由统一身份反馈,需要将明文通过help网站DES加密后使用)
+receive.msg.url.param.pwd=yakgeZqYXMKgFFXvBtwAtg==
+
+#每次批量下拉事件的数目
+receive.msg.url.param.size=10
+
+#调度执行时间间隔,单位:毫秒
+timer.interval=1200000
+
+#调度重试时间间隔,单位:毫秒
+timer.retry=60000
+
+#链接打开超时时间,单位:毫秒
+receive.msg.url.param.connecttimeout=300000
+#链接读取超时时间,单位:毫秒
+receive.msg.url.param.readtimeout=300000
+
+
+sinopec.siam.version= V3.4
+sinopec.siam.releasedate= 2024-08-29
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
new file mode 100644
index 0000000..ab40229
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/filter/InitFilter.java
@@ -0,0 +1,41 @@
+package com.sinopec.siam.provisioning.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import com.sinopec.siam.provisioning.handle.SimpleProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import com.sinopec.siam.apache.log4j.Logger;
+
+public class InitFilter implements Filter{
+ /** Class logger. */
+ private final Logger log = Logger.getLogger(InitFilter.class);
+ public void init(FilterConfig filterConfig) throws ServletException {
+ // TODO Auto-generated method stub
+ log.info("================>[Filter]准备开始接收消息");
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer=ProvisioningEventSubscriberTimer.getInstance(new SimpleProvisioningEventListener());
+ try{
+ provisioningEventSubscriberTimer.start();
+ log.info("================>[Filter]自动开始接收消息.");
+ }catch(IllegalThreadStateException e){
+ }
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void destroy() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
new file mode 100644
index 0000000..8f2a803
--- /dev/null
+++ b/casic-web/src/main/java/com/sinopec/siam/provisioning/handle/SimpleProvisioningEventListener.java
@@ -0,0 +1,53 @@
+/**
+ *
+ */
+package com.sinopec.siam.provisioning.handle;
+
+import com.casic.missiles.core.util.SpringContextHolder;
+import com.casic.missiles.modular.system.dto.SamlUserDTO;
+import com.casic.missiles.modular.system.service.ISyncProvisionService;
+import com.sinopec.siam.provisioning.entity.*;
+import com.sinopec.siam.provisioning.listener.ProvisioningEventListener;
+import com.sinopec.siam.provisioning.timer.ProvisioningEventSubscriberTimer;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+/**
+ * 默认监听事件处理实现类
+ * 接口默认将事件XML转换成ProvisioningEvent对象。
+ *
+ * @author zhaodonglu
+ * @since 2012-7-23 下午2:00:17
+ */
+@Slf4j
+public class SimpleProvisioningEventListener implements ProvisioningEventListener {
+
+ /**
+ *
+ */
+ public SimpleProvisioningEventListener() {
+ super();
+ }
+
+ public void process(ProvisioningEvents events) {
+ ISyncProvisionService service = SpringContextHolder.getBean(ISyncProvisionService.class);
+ if (service == null) {
+ log.error("ISyncProvisionService is null");
+ }
+ // TODO Auto-generated method stub
+ service.loadData(events);
+
+ }
+
+ public static void main(String[] args) {
+ ProvisioningEventSubscriberTimer provisioningEventSubscriberTimer = ProvisioningEventSubscriberTimer
+ .getInstance(new SimpleProvisioningEventListener());
+ try {
+ provisioningEventSubscriberTimer.start();
+ } catch (IllegalThreadStateException e) {
+ }
+ }
+
+}
diff --git a/casic-web/src/main/resources/conf/sp-simple-config.properties b/casic-web/src/main/resources/conf/sp-simple-config.properties
index 9e647ef..1200c3d 100644
--- a/casic-web/src/main/resources/conf/sp-simple-config.properties
+++ b/casic-web/src/main/resources/conf/sp-simple-config.properties
@@ -80,9 +80,9 @@
#sp.metadata.ts.download.url+sp.metadata.url+sp.metadata.url.entityId???metadata????
#sp.metadata.backUpPath?idp.metadata.backUpPath?metadata????????
sp.metadata.url=/ts/services/restful/topology/publisher/getEntityDescriptorByEntityID?entityID=
-sp.metadata.backUpPath=classpath:sp-metadata.xml
+sp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\sp-metadata.xml
idp.metadata.url=/ts/services/restful/topology/publisher/getIdPEntitiesDescriptor
-idp.metadata.backUpPath=classpath:idp-metadata-all.xml
+idp.metadata.backUpPath=D:\\casic\\casic-smartcity\\casic-web\\src\\main\\resources\\idp-metadata-all.xml
#------------------------------------------------------------------------------------
diff --git a/casic-web/src/main/resources/config/application-dm.yml b/casic-web/src/main/resources/config/application-dm.yml
index 2b255ae..8fa0c2f 100644
--- a/casic-web/src/main/resources/config/application-dm.yml
+++ b/casic-web/src/main/resources/config/application-dm.yml
@@ -3,10 +3,10 @@
################### spring配置 ###################
spring:
datasource:
- url: jdbc:dm://10.80.1.157:5236/schema=XLJC?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
+ url: jdbc:dm://111.198.10.15:11211/SMARTWELL
driver-class-name: dm.jdbc.driver.DmDriver
- username: XLJC
- password: Xljc@2023
+ username: SMARTWELL
+ password: Casic203!
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
@@ -47,7 +47,7 @@
casic:
kaptcha-open: false #是否开启登录时验证码 (true/false)
#kaptcha-open: false #是否开启登录时验证码 (true/false)
- no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token
+ no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token,/route/token
db:
init:
enable: false
@@ -73,9 +73,10 @@
appKey: 5cV2rugxAb8o28WK6RSFU6
masterSecret: fQsKrOaFZy5tvKb3Vd3vv5
logging:
- level:
- root: info
- com.casic: debug
+ level.root: info
+ level.com.casic: debug
+ level.com.sinopec.siam.agent.sp.config: debug
+ level.com.sinopec: debug
file:
path: logs/
name: missiles.log
diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml
index c5c878e..448a584 100644
--- a/casic-web/src/main/resources/config/application.yml
+++ b/casic-web/src/main/resources/config/application.yml
@@ -36,7 +36,7 @@
urlExclusion: /well/update,/well/add
cas-type: sso
sso:
- noFilterURLs: /sys/config/baseConfig,/route/mockToken,/websocket/*,/job/updateSinkJob,/user/login/token
+ noFilterURLs: /sys/config/baseConfig;/route/mockToken;/websocket/*;/job/updateSinkJob;/user/login/token
web:
host: http://api.map.baidu.com/geoconv/v1/ #前端路径, 需提供授权异常页面,登录成功页面
config: