Parcourir la source

Initial commit

wangrs il y a 4 ans
commit
dcdcf683a9
100 fichiers modifiés avec 1522 ajouts et 0 suppressions
  1. 6 0
      Dockerfile
  2. 248 0
      approve-gateway.iml
  3. 189 0
      pom.xml
  4. 63 0
      src/main/assembly/assembly.xml
  5. 95 0
      src/main/assembly/conf/application.yml
  6. 37 0
      src/main/assembly/conf/logback.xml
  7. 19 0
      src/main/java/com/dragonsoft/dcuc/approvegateway/ApproveGatewayApplication.java
  8. 35 0
      src/main/java/com/dragonsoft/dcuc/approvegateway/controller/ApproveErrorController.java
  9. 59 0
      src/main/java/com/dragonsoft/dcuc/approvegateway/controller/LoginDemoController.java
  10. 134 0
      src/main/java/com/dragonsoft/dcuc/approvegateway/filter/DcucJwtTokenPreFilter.java
  11. 114 0
      src/main/java/com/dragonsoft/dcuc/approvegateway/filter/HwTokenPreFilter.java
  12. 117 0
      src/main/java/com/dragonsoft/dcuc/approvegateway/pojo/OauthUserVo.java
  13. 205 0
      src/main/java/com/dragonsoft/dcuc/approvegateway/util/ApiGwUtils.java
  14. 94 0
      src/main/resources/application.yml
  15. 13 0
      src/test/java/com/dragonsoft/dcuc/approvegateway/ApproveGatewayApplicationTests.java
  16. BIN
      target/approve-gateway-1.0.0-SNAPSHOT.jar
  17. BIN
      target/approve-gateway-1.0.0-SNAPSHOT.tar.gz
  18. BIN
      target/classes/META-INF/approve-gateway.kotlin_module
  19. 94 0
      target/classes/application.yml
  20. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/ApproveGatewayApplication.class
  21. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/controller/ApproveErrorController.class
  22. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/controller/LoginDemoController.class
  23. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/filter/DcucJwtTokenPreFilter.class
  24. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/filter/HwTokenPreFilter.class
  25. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/pojo/OauthUserVo.class
  26. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/util/ApiGwUtils$1.class
  27. BIN
      target/classes/com/dragonsoft/dcuc/approvegateway/util/ApiGwUtils.class
  28. 0 0
      target/dependency-maven-plugin-markers/com.dragonsoft-duceap-base-jar-2.1.0-SNAPSHOT-1283250307
  29. BIN
      target/lib/HdrHistogram-2.1.9.jar
  30. BIN
      target/lib/LatencyUtils-2.0.3.jar
  31. BIN
      target/lib/accessors-smart-1.2.jar
  32. BIN
      target/lib/android-json-0.0.20131108.vaadin1.jar
  33. BIN
      target/lib/aopalliance-1.0.jar
  34. BIN
      target/lib/apiguardian-api-1.1.0.jar
  35. BIN
      target/lib/apollo-client-1.2.0-SNAPSHOT.jar
  36. BIN
      target/lib/apollo-core-1.2.0-SNAPSHOT.jar
  37. BIN
      target/lib/apollo-openapi-1.2.0-SNAPSHOT.jar
  38. BIN
      target/lib/approve-common-1.0.0-SNAPSHOT.jar
  39. BIN
      target/lib/archaius-core-0.7.6.jar
  40. BIN
      target/lib/asm-3.1.jar
  41. BIN
      target/lib/asm-5.0.4.jar
  42. BIN
      target/lib/aspectjweaver-1.9.5.jar
  43. BIN
      target/lib/assertj-core-3.16.1.jar
  44. BIN
      target/lib/author-dragon-3.0.2.jar
  45. BIN
      target/lib/bcpkix-jdk15on-1.64.jar
  46. BIN
      target/lib/bcprov-jdk15on-1.56.jar
  47. BIN
      target/lib/byte-buddy-1.10.11.jar
  48. BIN
      target/lib/byte-buddy-agent-1.10.11.jar
  49. BIN
      target/lib/caffeine-2.8.4.jar
  50. BIN
      target/lib/cglib-2.2.jar
  51. BIN
      target/lib/checker-qual-3.4.0.jar
  52. BIN
      target/lib/classmate-1.5.1.jar
  53. BIN
      target/lib/commons-beanutils-1.8.3.jar
  54. BIN
      target/lib/commons-codec-1.14.jar
  55. BIN
      target/lib/commons-collections-3.2.jar
  56. BIN
      target/lib/commons-collections4-4.1.jar
  57. BIN
      target/lib/commons-configuration-1.8.jar
  58. BIN
      target/lib/commons-fileupload-1.2.1.jar
  59. BIN
      target/lib/commons-io-2.5.jar
  60. BIN
      target/lib/commons-lang-2.3.jar
  61. BIN
      target/lib/commons-lang3-3.10.jar
  62. BIN
      target/lib/commons-logging-1.1.1.jar
  63. BIN
      target/lib/core-3.1.0.jar
  64. BIN
      target/lib/curvesapi-1.04.jar
  65. BIN
      target/lib/dom4j-1.6.1.jar
  66. BIN
      target/lib/duceap-base-2.1.0-SNAPSHOT.jar
  67. BIN
      target/lib/duceap-boot-autoconfigure-2.1.0-SNAPSHOT.jar
  68. BIN
      target/lib/duceap-cloud-config-apollo-2.1.0-SNAPSHOT.jar
  69. BIN
      target/lib/duceap-cloud-openfeign-2.1.0-SNAPSHOT.jar
  70. BIN
      target/lib/duceap-cloud-starter-2.1.0-SNAPSHOT.jar
  71. BIN
      target/lib/duceap-cloud-starter-config-apollo-2.1.0-SNAPSHOT.jar
  72. BIN
      target/lib/duceap-commons-2.1.0-SNAPSHOT.jar
  73. BIN
      target/lib/duceap-core-service-2.1.0-SNAPSHOT.jar
  74. BIN
      target/lib/duceap-extension-restclient-2.1.0-SNAPSHOT.jar
  75. BIN
      target/lib/duceap-security-jwt-2.1.0-SNAPSHOT.jar
  76. BIN
      target/lib/duceap-support-license-2.1.0-SNAPSHOT.jar
  77. BIN
      target/lib/easyexcel-2.2.4.jar
  78. BIN
      target/lib/error_prone_annotations-2.3.4.jar
  79. BIN
      target/lib/ezmorph-1.0.6.jar
  80. BIN
      target/lib/fastjson-1.2.57.jar
  81. BIN
      target/lib/feign-core-10.10.1.jar
  82. BIN
      target/lib/feign-form-3.8.0.jar
  83. BIN
      target/lib/feign-form-spring-3.8.0.jar
  84. BIN
      target/lib/feign-hystrix-10.10.1.jar
  85. BIN
      target/lib/feign-slf4j-10.10.1.jar
  86. BIN
      target/lib/gentlyWEB-utils-1.1.GA.jar
  87. BIN
      target/lib/gson-2.8.6.jar
  88. BIN
      target/lib/guava-2.8.4.jar
  89. BIN
      target/lib/guava-20.0.jar
  90. BIN
      target/lib/guice-4.1.0.jar
  91. BIN
      target/lib/hamcrest-2.2.jar
  92. BIN
      target/lib/hibernate-validator-6.1.5.Final.jar
  93. BIN
      target/lib/httpclient-4.5.12.jar
  94. BIN
      target/lib/httpcore-4.4.13.jar
  95. BIN
      target/lib/hutool-all-4.4.5.jar
  96. BIN
      target/lib/hystrix-core-1.5.18.jar
  97. BIN
      target/lib/hystrix-javanica-1.5.18.jar
  98. BIN
      target/lib/hystrix-metrics-event-stream-1.5.18.jar
  99. BIN
      target/lib/hystrix-serialization-1.5.18.jar
  100. BIN
      target/lib/jackson-annotations-2.11.0.jar

+ 6 - 0
Dockerfile

@@ -0,0 +1,6 @@
+# 基础镜像为Jenkins构建时选择的镜像
+FROM bus.ga/base/dragon-java:jdk8-alpine-arm64
+# ${pomVersion}对应pom里的数字version,如:1.0.0
+ADD target/approve-gateway-${pomVersion}-SNAPSHOT.tar.gz /opt/docker/
+RUN mv /opt/docker/approve-gateway-${pomVersion}-SNAPSHOT /opt/docker/approve-gateway
+ENTRYPOINT ["/opt/docker/approve-gateway/bin/start.sh"];

+ 248 - 0
approve-gateway.iml

@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="approve-common" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-security-jwt:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:transmittable-thread-local:2.11.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.10.5" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.jsonwebtoken:jjwt-impl:0.10.5" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.jsonwebtoken:jjwt-jackson:0.10.5" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-cloud-starter-config-apollo:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-cloud-config-apollo:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.ctrip.framework.apollo:apollo-client:1.2.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.google.inject:guice:4.1.0" level="project" />
+    <orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />
+    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
+    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" />
+    <orderEntry type="library" name="Maven: jaxen:jaxen:1.2.0" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-support-license:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:author-dragon:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.2.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-core-service:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.josql:josql:2.1" level="project" />
+    <orderEntry type="library" name="Maven: com.gentlyweb.utils:gentlyWEB-utils:1.1.GA" level="project" />
+    <orderEntry type="library" name="Maven: org.json:json:20131018" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:jdk13:2.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
+    <orderEntry type="library" name="Maven: com.ctrip.framework.apollo:apollo-openapi:1.2.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.ctrip.framework.apollo:apollo-core:1.2.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-cloud-starter:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.36" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.36" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-cloud-openfeign:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.10.1" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.10.1" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.10.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.3.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-boot-autoconfigure:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-support-licenseignore:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.57" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.trove4j:core:3.1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-extension-restclient:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.github.ben-manes.caffeine:guava:2.8.4" level="project" />
+    <orderEntry type="library" name="Maven: com.github.ben-manes.caffeine:caffeine:2.8.4" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.4.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-nacos-discovery:2.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-common:1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-api:1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.64" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.6" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.google.code.findbugs:jsr305:3.0.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.8" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.ribbon:ribbon-transport:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-contexts:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-servo:0.4.9" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.9" level="project" />
+    <orderEntry type="library" name="Maven: javax.inject:javax.inject:1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey.contribs:jersey-apache-client4:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.servo:servo-core:0.12.21" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.netflix-commons:netflix-commons-util:0.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-loadbalancer:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-statistics:0.1.1" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-zuul:2.0.0.M2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-zuul:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-zuul:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-hystrix:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.5.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-serialization:1.5.18" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml.jackson.module:jackson-module-afterburner:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-metrics-event-stream:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-javanica:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.5" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava-reactive-streams:1.2.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.zuul:zuul-core:1.3.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.vintage:junit-vintage-engine:5.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.11" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.11" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.3.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-security-dcuc:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft.dcuc:dcuc-client:1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: javax.websocket:javax.websocket-api:1.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-base:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-core-web:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-security-dids:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft.dids:dids-client:2.2.1-2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.axis:axis:1.4" level="project" />
+    <orderEntry type="library" name="Maven: axis:axis-wsdl4j:1.6.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml:JAXRPC:1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons.digester:commons-digester:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:discovery:0.2" level="project" />
+    <orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:middleobject:1.1" level="project" />
+    <orderEntry type="library" name="Maven: org.jdom:jdom:1.1" level="project" />
+    <orderEntry type="library" name="Maven: xerces:xerces:2.6.2" level="project" />
+    <orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml.soap:saaj:1.2" level="project" />
+    <orderEntry type="library" name="Maven: com.dragonsoft:duceap-commons:2.1.0-SNAPSHOT" level="project" />
+    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.24.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:4.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.56" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: cglib:cglib:2.2" level="project" />
+    <orderEntry type="library" name="Maven: asm:asm:3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:javax.el:3.0.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jsoup:jsoup:1.12.2" level="project" />
+    <orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />
+  </component>
+</module>

+ 189 - 0
pom.xml

@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.dragonsoft.dcuc</groupId>
+    <artifactId>approve-gateway</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <name>approve-gateway</name>
+    <description>approve-gateway</description>
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <!-- 导入duceap-cloud 2.1 POM定义-->
+            <dependency>
+                <groupId>com.dragonsoft</groupId>
+                <artifactId>duceap-cloud-parent</artifactId>
+                <version>2.1.0-SNAPSHOT</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <dependencies>
+        <dependency>
+            <artifactId>approve-common</artifactId>
+            <groupId>com.dragonsoft.dcuc</groupId>
+            <version>1.0.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.dragonsoft</groupId>
+                    <artifactId>duceap-boot-starter-web</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.dragonsoft</groupId>
+            <artifactId>duceap-cloud-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-zuul</artifactId>
+            <version>2.0.0.M2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!-- dcuc登陆 -->
+        <dependency>
+            <groupId>com.dragonsoft</groupId>
+            <artifactId>duceap-security-dcuc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.dragonsoft</groupId>
+            <artifactId>duceap-security-dids</artifactId>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <repository>
+            <id>duceap-releases</id>
+            <name>Team Nexus Release Repository</name>
+            <url>http://192.168.6.13:8081/nexus/content/groups/public</url>
+            <releases>
+                <enabled>true</enabled>
+                <updatePolicy>always</updatePolicy>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+                <updatePolicy>always</updatePolicy>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <distributionManagement>
+        <snapshotRepository>
+            <id>duceap-snapshots</id>
+            <name>Team Nexus Snapshot Repository</name>
+            <url>http://192.168.6.13:8081/nexus/content/repositories/duceap-snapshots</url>
+            <uniqueVersion>false</uniqueVersion>
+        </snapshotRepository>
+    </distributionManagement>
+    <profiles>
+        <profile>
+            <id>jar</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <properties>
+                <project.packaging>jar</project.packaging>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-dependency-plugin</artifactId>
+                        <version>2.6</version>
+                        <executions>
+                            <execution>
+                                <id>copy-libs</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>copy-dependencies</goal>
+                                </goals>
+                                <configuration>
+                                    <!--<excludeScope>provided</excludeScope>-->
+                                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                                    <!--取消依赖包的时间戳-->
+                                    <useBaseVersion>true</useBaseVersion>
+                                    <!--排除licenseignore包,用来禁用许可开关,防止生产环境通过关闭开关,绕过许可-->
+                                    <excludeArtifactIds>duceap-support-licenseignore</excludeArtifactIds>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>unpack</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>unpack</goal>
+                                </goals>
+                                <configuration>
+                                    <artifactItems>
+                                        <artifactItem>
+                                            <groupId>com.dragonsoft</groupId>
+                                            <artifactId>duceap-base</artifactId>
+                                            <!--根据框架版本修改-->
+                                            <version>2.1.0-SNAPSHOT</version>
+                                            <!--<version>2.1.0-SNAPSHOT</version>-->
+                                            <outputDirectory>${project.build.directory}/temp</outputDirectory>
+                                            <!--加入平台的启动脚本-->
+                                            <includes>META-INF/scripts/**</includes>
+                                        </artifactItem>
+                                    </artifactItems>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <version>2.5.5</version>
+                        <executions>
+                            <execution>
+                                <id>make-assembly</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <finalName>${project.name}-${project.version}</finalName>
+                                    <appendAssemblyId>false</appendAssemblyId>
+                                    <!--配置描述文件路径-->
+                                    <descriptor>src/main/assembly/assembly.xml</descriptor>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-jar-plugin</artifactId>
+                        <version>2.4</version>
+                        <configuration>
+                            <archive>
+                                <manifest>
+                                    <!--运行jar包时运行的主类,要求类全名-->
+                                    <mainClass>com.dragonsoft.dcuc.approvegateway.ApproveGatewayApplication</mainClass>
+                                    <addClasspath>true</addClasspath>
+                                    <!--取消MANIFEST.MF中classpath下的时间戳-->
+                                    <useUniqueVersions>false</useUniqueVersions>
+                                </manifest>
+                            </archive>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-compiler-plugin</artifactId>
+                        <version>3.6.0</version>
+                        <configuration>
+                            <source>8</source>
+                            <target>8</target>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+</project>

+ 63 - 0
src/main/assembly/assembly.xml

@@ -0,0 +1,63 @@
+<!--
+ - Copyright 1999-2011 Alibaba Group.
+ -
+ - Licensed under the Apache License, Version 2.0 (the "License");
+ - you may not use this file except in compliance with the License.
+ - You may obtain a copy of the License at
+ -
+ -      http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing, software
+ - distributed under the License is distributed on an "AS IS" BASIS,
+ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ - See the License for the specific language governing permissions and
+ - limitations under the License.
+-->
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+    <id>assembly</id>
+    <formats>
+        <format>tar.gz</format>
+    </formats>
+    <includeBaseDirectory>true</includeBaseDirectory>
+    <fileSets>
+        <fileSet>
+            <directory>${project.build.directory}/temp/META-INF/scripts/</directory>
+            <outputDirectory>/bin</outputDirectory>
+            <includes>
+                <include>*.sh</include>
+                <include>*.bat</include>
+            </includes>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/webapp</directory>
+            <outputDirectory>web</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/assembly/conf</directory>
+            <outputDirectory>conf</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/assembly/libs</directory>
+            <outputDirectory>libs</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
+            <directory>${project.build.directory}/lib</directory>
+            <outputDirectory>lib</outputDirectory>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
+            <directory>${project.build.directory}</directory>
+            <outputDirectory>lib</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+            <fileMode>0755</fileMode>
+        </fileSet>
+    </fileSets>
+</assembly>

+ 95 - 0
src/main/assembly/conf/application.yml

@@ -0,0 +1,95 @@
+server:
+  port: 8866
+  servlet:
+    context-path: /approve-gateway
+
+spring:
+  application:
+    name: approve-gateway
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:8848
+
+zuul:
+  retryable: true
+  # 这个配置必须保留,才会传递Authorization,cookie等
+  sensitive-headers:
+  host:
+    connect-timeout-millis: 60000
+    socket-timeout-millis: 60000
+ribbon:
+  ConnectTimeout: 60000 # 连接超时时间(ms)
+  ReadTimeout: 60000 # 通信超时时间(ms)
+  OkToRetryOnAllOperations: true # 是否对所有操作重试
+  MaxAutoRetriesNextServer: 2 # 同一服务不同实例的重试次数
+  MaxAutoRetries: 1 # 同一实例的重试次数
+hystrix:
+  command:
+    default:
+      execution:
+        isolation:
+          thread:
+            timeoutInMillisecond: 60000 # 熔断超时时长:6000ms
+
+
+duceap:
+  license:
+    dataCacheMethod: apollo
+    #配置用来指定license对接的后端项目地址(格式:ip:port/context,如http://10.10.10.10:8080/ctx),默认使用HttpServletRequest.getLocalAddr()方法获取ip地址,应用在docker部署环境中无法获取机子的真实ip地址 考虑以配置参数的形式传入
+    #address: http://10.10.10.10:8080/ctx
+    enabled: true
+  apollo:
+    client:
+      host: http://192.168.10.27:8070 #配置中心地址(portal端)
+  security:
+    ##配置登陆方式,dids、dssoac、dcuc
+    type: dids
+    ##dids登录配置#
+    dids2:
+      ##应用代码
+      appCode: YHZX0000000000000001
+      useSSO: true
+      ##单点登录服务器地址
+      SSOLoginUrl: http://10.201.7.30:9090/didsserver/login
+      ##单点登录服务接口地址
+      SSOValidateUrl: http://10.201.7.30:9090/didsserver/serviceValidate
+      ##对接系统地址(ip:端口/上下文/login) 开发环境中, ip端口需要配置成代理的前端地址(请全程使用真实的ip 而不是localhost或者127.0.0.1,否则会导致登录失败)
+      SSOServiceUrl: http://10.11.0.59:1645/approve-gateway/login
+      accessType: 1
+      ##单点登录服务接口地址
+      webServiceUrl: http://10.201.7.30:9090/didsserver/webservices/
+      jndi: JDBC/DIDS
+      filterType: 1
+      ##若匹配该地址,则无须过滤
+      noFilterUrl: /v2/api-docs,/api/v1/process-types,api/v1/process-type,api/v1/apply,services,hessian,commons,install.action,.xml,/install,/widgets-src/,/authorizationPage.html,/importAuthorizationFile.html,/license/LicenseManagerServlet,/authorizationFile/
+    dcuc:
+      casServerUrlPrefix: http://192.168.10.2:8877/sso
+      serverName: http://10.11.0.59:1645
+      ignorePattern: /js/*|/img/*|/css/*|/authorizationPage.html|/importAuthorizationFile.html|/license/LicenseManagerServlet|/authorizationFile/|/api/v1
+      ApiUrl: http://192.168.10.2:8860/dcuc
+      appCode: YHZX0000000000000001
+#=========================apollo配置信息============================#
+apollo:
+  bootstrap:
+    enabled: true #是否启用apollo
+    namespaces: application, dragonsoft.approve-common #命名空间,默认application
+  cluster: default #集群,默认default
+  meta: http://192.168.10.27:8080 #配置中心地址(服务端)
+
+approve:
+  filter:
+    hw:
+      app:
+        secret: test
+        key: test
+      # 华为网关地址
+      host: http://10.11.1.164:11480
+      # 过滤器开关
+      enabled: false
+    dcuc:
+      # dcuc主机地址
+      host: http://10.11.0.14:8870
+      # 过滤器开关
+      enabled: true
+

+ 37 - 0
src/main/assembly/conf/logback.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>logs/dcuc-approve.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>logs/dcuc-approve.%d{yyyy-MM-dd}.log</fileNamePattern>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- project default level -->
+    <logger name="java.sql.Connection" level="${logback.level:-INFO}"/>
+    <logger name="java.sql.Statement" level="${logback.level:-INFO}"/>
+    <logger name="java.sql.PreparedStatement" level="${logback.level:-INFO}"/>
+    <logger name="com.baomidou.mybatisplus" level="${logback.level:-DEBUG}"/>
+    <logger name="com.dragonsoft" level="${logback.level:-DEBUG}"/>
+    <logger name="com.dragonsoft.kafka" level="${logback.level:-WARN}"/>
+    <logger name="org.apache.kafka" level="${logback.level:-WARN}"/>
+    <logger name="com.dragonsoft.duceap.security.dcuc.filter" level="${logback.level:-DEBUG}"/>
+
+
+    <!--log4jdbc -->
+    <logger name="jdbc.sqltiming" level="${logback.level:-INFO}"/>
+
+    <root level="${logback.level:-INFO}">
+        <appender-ref ref="console"/>
+        <appender-ref ref="rollingFile"/>
+    </root>
+</configuration>

+ 19 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/ApproveGatewayApplication.java

@@ -0,0 +1,19 @@
+package com.dragonsoft.dcuc.approvegateway;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
+import org.springframework.cloud.netflix.zuul.EnableZuulServer;
+
+@SpringBootApplication(scanBasePackages = "com.dragonsoft.*")
+@EntityScan(basePackages = "com.dragonsoft.*")
+@EnableZuulProxy
+@EnableZuulServer
+public class ApproveGatewayApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ApproveGatewayApplication.class, args);
+    }
+
+}

+ 35 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/controller/ApproveErrorController.java

@@ -0,0 +1,35 @@
+package com.dragonsoft.dcuc.approvegateway.controller;
+
+import com.dragonsoft.approve.common.HttpCode;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.exception.ApplicationException;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Author: qiuyu
+ * @Date: 2021/1/15 14:15
+ * @Description:
+ */
+@RestController
+public class ApproveErrorController {
+
+    @GetMapping(value = "/error")
+    public ResponseEntity<ResponseStatus> error(HttpServletRequest request) {
+        String message = request.getAttribute("javax.servlet.error.message").toString();
+        Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
+
+        if (throwable.getCause() instanceof ApplicationException) {
+            ApplicationException ex = (ApplicationException) throwable.getCause();
+            int status = ex.getStatusCode() == 0 ? 500 : ex.getStatusCode();
+            return new ResponseEntity<>(new ResponseStatus(String.valueOf(status), ex.getMessage()), HttpStatus.resolve(HttpCode.PARAM_VERIFY_ERROR.getCode()));
+        } else {
+            return new ResponseEntity<>(ResponseStatus.fail("500", "未知异常[" + throwable.getMessage() + "]"), HttpStatus.BAD_GATEWAY);
+        }
+
+    }
+}

+ 59 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/controller/LoginDemoController.java

@@ -0,0 +1,59 @@
+package com.dragonsoft.dcuc.approvegateway.controller;
+
+import com.dragonsoft.dcuc.client.logout.DcucLogoutHandler;
+import com.dragonsoft.dids.client.utils.PropUtils;
+import com.dragonsoft.duceap.base.entity.http.ResponseLink;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.dragonsoft.duceap.security.dcuc.DcucProperties;
+import com.dragonsoft.duceap.security.dids.DidsProperties;
+import com.dragonsoft.duceap.web.SecurityProperties;
+import com.dragonsoft.duceap.web.utils.RequestUtils;
+import com.dragonsoft.duceap.web.utils.ResponseUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+
+/**
+ * Created by lidr on 2021/2/24
+ */
+@RestController
+public class LoginDemoController {
+    @Autowired(required = false)
+    private DidsProperties didsProperties;
+    @Autowired(required = false)
+    private DcucProperties dcucProperties;
+    @Autowired
+    SecurityProperties securityProperties;
+
+    @RequestMapping({"/gateway/logout"})
+    public void logout(HttpServletRequest request, HttpServletResponse response) throws Exception {
+        String type = securityProperties.getType();
+        if(type.equalsIgnoreCase("dcuc")){
+            String redirectUrl = request.getParameter("redirectUrl") != null ? request.getParameter("redirectUrl") : this.dcucProperties.getServerName();
+            String logoutUrl = this.dcucProperties.getCasServerUrlPrefix() + "/logout?service=" + URLEncoder.encode(redirectUrl, "UTF-8");
+            ResponseLink responseLink = ResponseLink.logout(logoutUrl);
+            if (RequestUtils.isXmlHttpRequest(request)) {
+                request.getSession().invalidate();
+                ResponseUtils.outJson(responseLink, response);
+            } else {
+                DcucLogoutHandler.logout(request, response, redirectUrl);
+            }
+        }else {
+            String ssoUrl = PropUtils.getInstance().getConfigItem("dids2.SSOLoginUrl").replace("/login", "");
+            String redirectUrl = StringUtils.defaultIfEmpty(request.getParameter("redirectUrl"), StringUtils.substringBeforeLast(this.didsProperties.getSSOServiceUrl(), "/login"));
+            String logoutUrl = ssoUrl + "/logout?service=" + redirectUrl;
+            ResponseLink responseLink = ResponseLink.logout(logoutUrl);
+            if(RequestUtils.isXmlHttpRequest(request)){
+                request.getSession().invalidate();
+                ResponseUtils.outJson(responseLink,response);
+            }else {
+                request.getSession().invalidate();
+                response.sendRedirect(logoutUrl);
+            }
+        }
+    }
+}

+ 134 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/filter/DcucJwtTokenPreFilter.java

@@ -0,0 +1,134 @@
+package com.dragonsoft.dcuc.approvegateway.filter;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dragonsoft.approve.common.ErrorCode;
+import com.dragonsoft.approve.model.TokenInfo;
+import com.dragonsoft.dcuc.approvegateway.pojo.OauthUserVo;
+import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
+import com.dragonsoft.duceap.base.exception.ApplicationException;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
+import com.dragonsoft.duceap.core.entity.response.ResponseResult;
+import com.dragonsoft.duceap.security.jwt.JwtTokenUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.netflix.zuul.ZuulFilter;
+import com.netflix.zuul.context.RequestContext;
+import com.netflix.zuul.exception.ZuulException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Optional;
+
+@Component
+public class DcucJwtTokenPreFilter extends ZuulFilter {
+
+    private static final Logger logger = LoggerFactory.getLogger(DcucJwtTokenPreFilter.class);
+
+    /**
+     * 获取用户信息接口
+     */
+    private static final String AUTH_USER_PATH = "/dcuc/api/user-service/v2/users/oauth";
+
+    /**
+     * 认证服务url
+     */
+    @Value("${approve.filter.dcuc.host:}")
+    private String oauthServiceHost;
+
+    /**
+     * 华为网关是否开启
+     */
+    @Value("${approve.filter.dcuc.enabled:true}")
+    private Boolean dcucEnabled;
+
+    @Override
+    public String filterType() {
+        return "pre";
+    }
+
+    @Override
+    public int filterOrder() {
+        return -10;
+    }
+
+    @Override
+    public boolean shouldFilter() {
+        return dcucEnabled;
+    }
+
+    @Override
+    public Object run() throws ZuulException {
+        RequestContext ctx = RequestContext.getCurrentContext();
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        logger.info("登录用户信息:{}", JSONObject.toJSONString(currentUser));
+        if (currentUser != null) {
+            String jwtToken = JwtTokenUtils.getAlgorithmGen(JwtTokenUtils.AlgorithmType.HS256).sign(currentUser);
+            ctx.addZuulRequestHeader(JwtTokenUtils.AUTHORIZATION_HEADER, JwtTokenUtils.TOKEN_PREFIX + jwtToken);
+            logger.info("登录jwtToken:{}", jwtToken);
+        }
+        return null;
+    }
+
+    private BaseSecurityUser getSecurityUser() {
+        RequestContext ctx = RequestContext.getCurrentContext();
+
+        //        logger.info();
+        String userToken = ctx.getRequest().getHeader("token");
+        String appToken = ctx.getRequest().getHeader("appToken");
+
+        HttpHeaders headers = new HttpHeaders();
+        //设置ContentType
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        //应用token
+        headers.add("dcucAppToken", appToken);
+        //用户token
+        headers.add("dcucUserToken", userToken);
+        logger.info("userToken=【{}】,appToken=【{}】", userToken, appToken);
+
+        //是否需要获取华为网关accessToken,公司内部无华为网关环境
+        if (Optional.ofNullable(ctx.get(HwTokenPreFilter.HW_TOKEN)).isPresent()) {
+            String accessToken = ((TokenInfo) ctx.get(HwTokenPreFilter.HW_TOKEN)).getAccessToken();
+            String authorization = JwtTokenUtils.TOKEN_PREFIX + accessToken;
+            headers.add("Authorization", authorization);
+            logger.info("华为accessToken=【{}】", accessToken);
+        }
+
+        BaseSecurityUser baseSecurityUser = null;
+        try {
+            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(new LinkedMultiValueMap(), headers);
+            RestTemplate restTemplate = new RestTemplate();
+            //远程调用用户中心接口
+            ResponseEntity<ResponseResult> exchange = restTemplate.exchange(oauthServiceHost + AUTH_USER_PATH, HttpMethod.GET, requestEntity, ResponseResult.class);
+            logger.info("远程调用返回结果resEntity=【{}】,请求url=【{}】", JSONObject.toJSONString(exchange), oauthServiceHost + AUTH_USER_PATH);
+            //判断请求是否成功
+            if (exchange.getStatusCode() == HttpStatus.OK) {
+                ResponseResult responseResult = exchange.getBody();
+                if (String.valueOf(HttpStatus.OK.value()).equals(responseResult.getStatusCode())) {
+                    OauthUserVo oauthUserVo = new ObjectMapper().convertValue(responseResult.getResult(), OauthUserVo.class);
+                    baseSecurityUser = new BaseSecurityUser();
+                    baseSecurityUser.setId(oauthUserVo.getId());
+                    baseSecurityUser.setName(oauthUserVo.getName());
+                    baseSecurityUser.setPoliceNo(oauthUserVo.getPoliceNumber());
+                    baseSecurityUser.setSecurityOrg(oauthUserVo.getOrgCode());
+//                    baseSecurityUser.setCode(oauthUserVo.getOrgCode());
+//                    baseSecurityUser.setUserName();
+//                    baseSecurityUser.setSecurityRoles();
+                }
+            }
+        } catch (Exception e) {
+            logger.error("用户信息获取失败", e);
+            throw new ApplicationException(ErrorCode.USER_INFO_ERROR.getCode(), ErrorCode.USER_INFO_ERROR.getMsg());
+        }
+        if (null == baseSecurityUser) {
+            logger.error("用户信息获取失败,用户信息为空!");
+            throw new ApplicationException(ErrorCode.USER_INFO_ERROR.getCode(), ErrorCode.USER_INFO_ERROR.getMsg());
+        }
+
+        return baseSecurityUser;
+    }
+}

+ 114 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/filter/HwTokenPreFilter.java

@@ -0,0 +1,114 @@
+package com.dragonsoft.dcuc.approvegateway.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.dragonsoft.approve.component.TokenOperate;
+import com.dragonsoft.approve.model.TokenInfo;
+import com.dragonsoft.dcuc.approvegateway.util.ApiGwUtils;
+import com.netflix.zuul.ZuulFilter;
+import com.netflix.zuul.context.RequestContext;
+import com.netflix.zuul.exception.ZuulException;
+import org.apache.commons.lang.time.DateUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @Author: qiuyu
+ * @Date: 2021/1/14 10:57
+ * @Description:
+ */
+//@Component
+public class HwTokenPreFilter extends ZuulFilter {
+
+    private static final Logger logger = LoggerFactory.getLogger(HwTokenPreFilter.class);
+
+    /**
+     * 华为网关API获取AppToken的URI
+     */
+    private static final String ACCESS_TOKEN_URI = "/v1/apigw/oauth2/token";
+
+    public static final String HW_TOKEN = "HW_TOKEN";
+
+    /**
+     * 容忍时间
+     */
+    public static final int TOLERATE_TIME = 5 * 60;
+
+    /**
+     * 华为AppKey
+     */
+    @Value("${approve.filter.hw.app.key:}")
+    private String hwAppKey;
+
+    /**
+     * 华为AppSecret
+     */
+    @Value("${approve.filter.hw.app.secret:}")
+    private String hwAppSecret;
+
+    /**
+     * 华为网关地址URL
+     */
+    @Value("${approve.filter.hw.host:}")
+    private String hwGatewayHost;
+
+    /**
+     * 华为网关是否开启
+     */
+    @Value("${approve.filter.hw.enabled:true}")
+    private Boolean hwEnabled;
+
+    @Autowired
+    private TokenOperate tokenComponent;
+
+
+    @Override
+    public String filterType() {
+        return "pre";
+    }
+
+    @Override
+    public int filterOrder() {
+        return -11;
+    }
+
+    @Override
+    public boolean shouldFilter() {
+        return hwEnabled;
+    }
+
+    @Override
+    public Object run() throws ZuulException {
+        RequestContext ctx = RequestContext.getCurrentContext();
+        ctx.set(HW_TOKEN, getTokenOauth());
+        return null;
+    }
+
+    /**
+     * 获取token信息
+     *
+     * @return
+     */
+    public TokenInfo getTokenOauth() {
+        TokenInfo tokenInfo = tokenComponent.fetchTokenInfo();
+
+        //token正常直接返回
+        if (null != tokenInfo && new Date().before(tokenInfo.getOverdueTime())) {
+            logger.info("HwTokenInfo=【{}】", JSON.toJSONString(tokenInfo));
+            return tokenInfo;
+        }
+
+        //token过期或者不存在
+        Date currentDate = new Date();
+        //调用华为网关获取accessToken
+        tokenInfo = ApiGwUtils.getAccessToken(hwGatewayHost + ACCESS_TOKEN_URI, hwAppKey, hwAppSecret);
+        //设置缓存
+        tokenInfo.setOverdueTime(DateUtils.addSeconds(currentDate, tokenInfo.getExpiresIn() - TOLERATE_TIME));
+        tokenComponent.pushHwTokenInfo(tokenInfo);
+        return tokenInfo;
+    }
+}

+ 117 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/pojo/OauthUserVo.java

@@ -0,0 +1,117 @@
+package com.dragonsoft.dcuc.approvegateway.pojo;
+
+import java.io.Serializable;
+
+/**
+ * 代码千万行,注释第一行,编码不规范,同事两行泪
+ *
+ * @author huang(jy)
+ * @version 1.0
+ * @date 2020/12/10 9:22
+ */
+public class OauthUserVo implements Serializable {
+    private static final long serialVersionUID = -7843750020214903309L;
+
+    //id(主键标识:UUID
+    private String id;
+
+    //姓名
+    private String name;
+
+    //省份证号
+    private String idcard;
+
+    //警号
+    private String policeNumber;
+
+    //机构名称
+    private String orgName;
+
+    //机构代码
+    private String orgCode;
+
+    //职务
+    private String postType;
+
+    //人员类型
+    private String userType;
+
+
+    public OauthUserVo() {
+    }
+
+    public OauthUserVo(String id, String name, String idcard, String policeNumber, String orgName, String orgCode, String postType, String userType) {
+        this.id = id;
+        this.name = name;
+        this.idcard = idcard;
+        this.policeNumber = policeNumber;
+        this.orgName = orgName;
+        this.orgCode = orgCode;
+        this.postType = postType;
+        this.userType = userType;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIdcard() {
+        return idcard;
+    }
+
+    public void setIdcard(String idcard) {
+        this.idcard = idcard;
+    }
+
+    public String getPoliceNumber() {
+        return policeNumber;
+    }
+
+    public void setPoliceNumber(String policeNumber) {
+        this.policeNumber = policeNumber;
+    }
+
+    public String getOrgName() {
+        return orgName;
+    }
+
+    public void setOrgName(String orgName) {
+        this.orgName = orgName;
+    }
+
+    public String getOrgCode() {
+        return orgCode;
+    }
+
+    public void setOrgCode(String orgCode) {
+        this.orgCode = orgCode;
+    }
+
+    public String getPostType() {
+        return postType;
+    }
+
+    public void setPostType(String postType) {
+        this.postType = postType;
+    }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
+}

+ 205 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/util/ApiGwUtils.java

@@ -0,0 +1,205 @@
+package com.dragonsoft.dcuc.approvegateway.util;
+
+
+import com.alibaba.fastjson.JSON;
+import com.dragonsoft.approve.common.ErrorCode;
+import com.dragonsoft.approve.model.TokenInfo;
+import com.dragonsoft.duceap.base.exception.ApplicationException;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.http.HttpException;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 代码千万行,注释第一行,编码不规范,同事两行泪
+ *
+ * @author huang(jy)
+ * @version 1.0
+ * @date 2020/12/16 19:25
+ */
+public class ApiGwUtils {
+    private static final Logger logger = LoggerFactory.getLogger(ApiGwUtils.class);
+    private final static String GRANT_TYPE = "client_credentials";
+    private final static String SCOPE = "default";
+
+    private static final String DATA_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+
+    /**
+     * 返回完整的值
+     *
+     * @param clientId
+     * @param clientSecret
+     * @return
+     */
+    public static TokenInfo getHuaweiTokenObj2(String clientId, String clientSecret, String requestUrl) {
+        TokenInfo hwTokenInfo = new TokenInfo();
+        try {
+            hwTokenInfo = getToken(clientId, clientSecret, requestUrl);
+        } catch (HttpException e) {
+            e.printStackTrace();
+        }
+        return hwTokenInfo;
+    }
+
+    /**
+     * 获取Token信息
+     *
+     * @param appKey    用户凭证中的 AppKey
+     * @param secretKey 用户凭证中的 SecretKey
+     * @return HwTokenInfo Token信息
+     */
+    public static TokenInfo getToken(String appKey, String secretKey, String requestUrl) throws HttpException {
+        // 添加请求体内容
+        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
+        pairs.add(new BasicNameValuePair("grant_type", GRANT_TYPE));
+        pairs.add(new BasicNameValuePair("client_id", appKey));
+        pairs.add(new BasicNameValuePair("client_secret", secretKey));
+        pairs.add(new BasicNameValuePair("scope", SCOPE));
+
+        String result = httpsForPostRequest(pairs, requestUrl);
+        return toObject(result, TokenInfo.class);
+    }
+
+
+    /**
+     * 获取token
+     *
+     * @return
+     */
+    public static TokenInfo getAccessToken(String requestUrl, String clientId, String clientSecret) {
+        logger.info("【verifyIdCard】:apigwUrl:{},clientId:{},clientSecret:{}", requestUrl, clientId, clientSecret);
+        TokenInfo tokenInfo = null;
+        try {
+            tokenInfo = ApiGwUtils.getHuaweiTokenObj2(clientId, clientSecret, requestUrl);
+            logger.info("【getAccessToken】获取token接口返回的信息:{}", JSON.toJSONString(tokenInfo));
+        } catch (Exception e) {
+            logger.error("【getAccessToken】获取token接口失败", e);
+            throw new ApplicationException(ErrorCode.HW_ACCESS_TOKEN_FAIL.getCode(), ErrorCode.HW_ACCESS_TOKEN_FAIL.getMsg());
+        }
+        return tokenInfo;
+    }
+
+
+    /**
+     * 刷新AccessToken有效期
+     *
+     * @param appKey       用户凭证中的 AppKey
+     * @param secretKey    用户凭证中的 SecretKey
+     * @param refreshToken Token信息中用于刷新有效期的 refresh_token
+     * @return HwTokenInfo Token信息
+     */
+    public static TokenInfo refreshToken(String appKey, String secretKey, String huaweiUrl, String refreshToken) throws HttpException {
+        // 添加请求体内容
+        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
+        pairs.add(new BasicNameValuePair("grant_type", "refresh_token"));
+        pairs.add(new BasicNameValuePair("client_id", appKey));
+        pairs.add(new BasicNameValuePair("client_secret", secretKey));
+        pairs.add(new BasicNameValuePair("refresh_token", refreshToken));
+
+        String result = httpsForPostRequest(pairs, huaweiUrl);
+        return toObject(result, TokenInfo.class);
+    }
+
+
+    /**
+     * https的POST请求
+     *
+     * @param data
+     * @return
+     * @throws HttpException
+     */
+    public static String httpsForPostRequest(List<NameValuePair> data, String requestUrl) throws HttpException {
+
+        SSLContext sslContext;
+        CloseableHttpClient client;
+        String result = "";
+        try {
+            // 创建Http客户端,设置信任自签名证书
+            sslContext = SSLContext.getInstance("TLSv1.2");
+            sslContext.init(null, new TrustManager[]{TRUST_ALL}, null);
+            SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext,
+                    new AllowAllHostnameVerifier());
+            client = HttpClients.custom().setSSLSocketFactory(sslSocketFactory).build();
+
+            // 创建POST请求,添加URL
+            URIBuilder uriBuilder = new URIBuilder(requestUrl);
+            HttpPost httpPost = new HttpPost(uriBuilder.build());
+
+            httpPost.setEntity(new UrlEncodedFormEntity(data, "UTF-8"));
+            // 添加请求头
+            httpPost.setHeader(HTTP.CONTENT_TYPE, "application/x-www-form-urlencoded");
+
+            // 发送请求
+            HttpResponse response = client.execute(httpPost);
+
+
+            // 解析响应内容
+            if (response.getStatusLine().getStatusCode() == 200) {
+                result = EntityUtils.toString((response).getEntity());
+            } else {
+                throw new HttpException(response.getStatusLine() + EntityUtils.toString((response).getEntity()));
+            }
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (KeyManagementException e) {
+            e.printStackTrace();
+        } catch (URISyntaxException e) {
+            e.printStackTrace();
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    private static X509TrustManager TRUST_ALL = new X509TrustManager() {
+        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+        }
+
+        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
+        }
+
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[0];
+        }
+    };
+
+    public static <T> T toObject(String json, Class<T> valueType) {
+        Gson gson = new GsonBuilder().setDateFormat(DATA_FORMAT).serializeNulls().create();
+        return gson.fromJson(json, valueType);
+    }
+
+    public static void main(String[] args) {
+        String a = "{\"access_token\":\"12\"}";
+        getAccessToken("", "", "");
+        System.out.println();
+    }
+}

+ 94 - 0
src/main/resources/application.yml

@@ -0,0 +1,94 @@
+server:
+  port: 8866
+  servlet:
+    context-path: /approve-gateway
+
+spring:
+  application:
+    name: approve-gateway
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:8848
+
+zuul:
+  retryable: true
+  # 这个配置必须保留,才会传递Authorization,cookie等
+  sensitive-headers:
+  host:
+    connect-timeout-millis: 60000
+    socket-timeout-millis: 60000
+
+ribbon:
+  ConnectTimeout: 60000 # 连接超时时间(ms)
+  ReadTimeout: 60000 # 通信超时时间(ms)
+  OkToRetryOnAllOperations: true # 是否对所有操作重试
+  MaxAutoRetriesNextServer: 2 # 同一服务不同实例的重试次数
+  MaxAutoRetries: 1 # 同一实例的重试次数
+hystrix:
+  command:
+    default:
+      execution:
+        isolation:
+          thread:
+            timeoutInMillisecond: 60000 # 熔断超时时长:6000ms
+
+duceap:
+  license:
+    dataCacheMethod: apollo
+    #配置用来指定license对接的后端项目地址(格式:ip:port/context,如http://10.10.10.10:8080/ctx),默认使用HttpServletRequest.getLocalAddr()方法获取ip地址,应用在docker部署环境中无法获取机子的真实ip地址 考虑以配置参数的形式传入
+    #address: http://10.10.10.10:8080/ctx
+    enabled: false
+  apollo:
+    client:
+      host: http://192.168.10.27:8070 #配置中心地址(portal端)
+  security:
+    ##配置登陆方式,dids、dssoac、dcuc
+    type: dids
+    ##dids登录配置#
+    dids2:
+      ##应用代码
+      appCode: YHZX0000000000000001
+      useSSO: true
+      ##单点登录服务器地址
+      SSOLoginUrl: http://10.201.7.30:9090/didsserver/login
+      ##单点登录服务接口地址
+      SSOValidateUrl: http://10.201.7.30:9090/didsserver/serviceValidate
+      ##对接系统地址(ip:端口/上下文/login) 开发环境中, ip端口需要配置成代理的前端地址(请全程使用真实的ip 而不是localhost或者127.0.0.1,否则会导致登录失败)
+      SSOServiceUrl: http://10.11.0.240:1645/approve-gateway/login
+      accessType: 1
+      ##单点登录服务接口地址
+      webServiceUrl: http://10.201.7.30:9090/didsserver/webservices/
+      jndi: JDBC/DIDS
+      filterType: 1
+      ##若匹配该地址,则无须过滤
+      noFilterUrl: /v2/api-docs,/api/v1/process-types,api/v1/process-type,api/v1/apply,services,hessian,commons,install.action,.xml,/install,/widgets-src/,/authorizationPage.html,/importAuthorizationFile.html,/license/LicenseManagerServlet,/authorizationFile/
+    dcuc:
+      casServerUrlPrefix: http://192.168.10.2:8877/sso
+      serverName: http://10.11.0.240:1645
+      ignorePattern: /js/*|/img/*|/css/*|/authorizationPage.html|/importAuthorizationFile.html|/license/LicenseManagerServlet|/authorizationFile/|/api/v1
+      ApiUrl: http://192.168.10.2:8860/dcuc
+      appCode: YHZX0000000000000001
+#=========================apollo配置信息============================#
+apollo:
+  bootstrap:
+    enabled: false #是否启用apollo
+    namespaces: application, dragonsoft.approve-common #命名空间,默认application
+  cluster: default #集群,默认default
+  meta: http://192.168.10.27:8080 #配置中心地址(服务端)
+
+approve:
+  filter:
+    hw:
+      app:
+        secret: test
+        key: test
+      # 华为网关地址
+      host: http://10.11.1.164:11480
+      # 过滤器开关
+      enabled: false
+    dcuc:
+      # dcuc主机地址
+      host: http://192.168.10.2:8870
+      # 过滤器开关
+      enabled: true

+ 13 - 0
src/test/java/com/dragonsoft/dcuc/approvegateway/ApproveGatewayApplicationTests.java

@@ -0,0 +1,13 @@
+package com.dragonsoft.dcuc.approvegateway;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class ApproveGatewayApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

BIN
target/approve-gateway-1.0.0-SNAPSHOT.jar


BIN
target/approve-gateway-1.0.0-SNAPSHOT.tar.gz


BIN
target/classes/META-INF/approve-gateway.kotlin_module


+ 94 - 0
target/classes/application.yml

@@ -0,0 +1,94 @@
+server:
+  port: 8866
+  servlet:
+    context-path: /approve-gateway
+
+spring:
+  application:
+    name: approve-gateway
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:8848
+
+zuul:
+  retryable: true
+  # 这个配置必须保留,才会传递Authorization,cookie等
+  sensitive-headers:
+  host:
+    connect-timeout-millis: 60000
+    socket-timeout-millis: 60000
+
+ribbon:
+  ConnectTimeout: 60000 # 连接超时时间(ms)
+  ReadTimeout: 60000 # 通信超时时间(ms)
+  OkToRetryOnAllOperations: true # 是否对所有操作重试
+  MaxAutoRetriesNextServer: 2 # 同一服务不同实例的重试次数
+  MaxAutoRetries: 1 # 同一实例的重试次数
+hystrix:
+  command:
+    default:
+      execution:
+        isolation:
+          thread:
+            timeoutInMillisecond: 60000 # 熔断超时时长:6000ms
+
+duceap:
+  license:
+    dataCacheMethod: apollo
+    #配置用来指定license对接的后端项目地址(格式:ip:port/context,如http://10.10.10.10:8080/ctx),默认使用HttpServletRequest.getLocalAddr()方法获取ip地址,应用在docker部署环境中无法获取机子的真实ip地址 考虑以配置参数的形式传入
+    #address: http://10.10.10.10:8080/ctx
+    enabled: false
+  apollo:
+    client:
+      host: http://192.168.10.27:8070 #配置中心地址(portal端)
+  security:
+    ##配置登陆方式,dids、dssoac、dcuc
+    type: dids
+    ##dids登录配置#
+    dids2:
+      ##应用代码
+      appCode: YHZX0000000000000001
+      useSSO: true
+      ##单点登录服务器地址
+      SSOLoginUrl: http://10.201.7.30:9090/didsserver/login
+      ##单点登录服务接口地址
+      SSOValidateUrl: http://10.201.7.30:9090/didsserver/serviceValidate
+      ##对接系统地址(ip:端口/上下文/login) 开发环境中, ip端口需要配置成代理的前端地址(请全程使用真实的ip 而不是localhost或者127.0.0.1,否则会导致登录失败)
+      SSOServiceUrl: http://10.11.0.240:1645/approve-gateway/login
+      accessType: 1
+      ##单点登录服务接口地址
+      webServiceUrl: http://10.201.7.30:9090/didsserver/webservices/
+      jndi: JDBC/DIDS
+      filterType: 1
+      ##若匹配该地址,则无须过滤
+      noFilterUrl: /v2/api-docs,/api/v1/process-types,api/v1/process-type,api/v1/apply,services,hessian,commons,install.action,.xml,/install,/widgets-src/,/authorizationPage.html,/importAuthorizationFile.html,/license/LicenseManagerServlet,/authorizationFile/
+    dcuc:
+      casServerUrlPrefix: http://192.168.10.2:8877/sso
+      serverName: http://10.11.0.240:1645
+      ignorePattern: /js/*|/img/*|/css/*|/authorizationPage.html|/importAuthorizationFile.html|/license/LicenseManagerServlet|/authorizationFile/|/api/v1
+      ApiUrl: http://192.168.10.2:8860/dcuc
+      appCode: YHZX0000000000000001
+#=========================apollo配置信息============================#
+apollo:
+  bootstrap:
+    enabled: false #是否启用apollo
+    namespaces: application, dragonsoft.approve-common #命名空间,默认application
+  cluster: default #集群,默认default
+  meta: http://192.168.10.27:8080 #配置中心地址(服务端)
+
+approve:
+  filter:
+    hw:
+      app:
+        secret: test
+        key: test
+      # 华为网关地址
+      host: http://10.11.1.164:11480
+      # 过滤器开关
+      enabled: false
+    dcuc:
+      # dcuc主机地址
+      host: http://192.168.10.2:8870
+      # 过滤器开关
+      enabled: true

BIN
target/classes/com/dragonsoft/dcuc/approvegateway/ApproveGatewayApplication.class


BIN
target/classes/com/dragonsoft/dcuc/approvegateway/controller/ApproveErrorController.class


BIN
target/classes/com/dragonsoft/dcuc/approvegateway/controller/LoginDemoController.class


BIN
target/classes/com/dragonsoft/dcuc/approvegateway/filter/DcucJwtTokenPreFilter.class


BIN
target/classes/com/dragonsoft/dcuc/approvegateway/filter/HwTokenPreFilter.class


BIN
target/classes/com/dragonsoft/dcuc/approvegateway/pojo/OauthUserVo.class


BIN
target/classes/com/dragonsoft/dcuc/approvegateway/util/ApiGwUtils$1.class


BIN
target/classes/com/dragonsoft/dcuc/approvegateway/util/ApiGwUtils.class


+ 0 - 0
target/dependency-maven-plugin-markers/com.dragonsoft-duceap-base-jar-2.1.0-SNAPSHOT-1283250307


BIN
target/lib/HdrHistogram-2.1.9.jar


BIN
target/lib/LatencyUtils-2.0.3.jar


BIN
target/lib/accessors-smart-1.2.jar


BIN
target/lib/android-json-0.0.20131108.vaadin1.jar


BIN
target/lib/aopalliance-1.0.jar


BIN
target/lib/apiguardian-api-1.1.0.jar


BIN
target/lib/apollo-client-1.2.0-SNAPSHOT.jar


BIN
target/lib/apollo-core-1.2.0-SNAPSHOT.jar


BIN
target/lib/apollo-openapi-1.2.0-SNAPSHOT.jar


BIN
target/lib/approve-common-1.0.0-SNAPSHOT.jar


BIN
target/lib/archaius-core-0.7.6.jar


BIN
target/lib/asm-3.1.jar


BIN
target/lib/asm-5.0.4.jar


BIN
target/lib/aspectjweaver-1.9.5.jar


BIN
target/lib/assertj-core-3.16.1.jar


BIN
target/lib/author-dragon-3.0.2.jar


BIN
target/lib/bcpkix-jdk15on-1.64.jar


BIN
target/lib/bcprov-jdk15on-1.56.jar


BIN
target/lib/byte-buddy-1.10.11.jar


BIN
target/lib/byte-buddy-agent-1.10.11.jar


BIN
target/lib/caffeine-2.8.4.jar


BIN
target/lib/cglib-2.2.jar


BIN
target/lib/checker-qual-3.4.0.jar


BIN
target/lib/classmate-1.5.1.jar


BIN
target/lib/commons-beanutils-1.8.3.jar


BIN
target/lib/commons-codec-1.14.jar


BIN
target/lib/commons-collections-3.2.jar


BIN
target/lib/commons-collections4-4.1.jar


BIN
target/lib/commons-configuration-1.8.jar


BIN
target/lib/commons-fileupload-1.2.1.jar


BIN
target/lib/commons-io-2.5.jar


BIN
target/lib/commons-lang-2.3.jar


BIN
target/lib/commons-lang3-3.10.jar


BIN
target/lib/commons-logging-1.1.1.jar


BIN
target/lib/core-3.1.0.jar


BIN
target/lib/curvesapi-1.04.jar


BIN
target/lib/dom4j-1.6.1.jar


BIN
target/lib/duceap-base-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-boot-autoconfigure-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-cloud-config-apollo-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-cloud-openfeign-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-cloud-starter-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-cloud-starter-config-apollo-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-commons-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-core-service-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-extension-restclient-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-security-jwt-2.1.0-SNAPSHOT.jar


BIN
target/lib/duceap-support-license-2.1.0-SNAPSHOT.jar


BIN
target/lib/easyexcel-2.2.4.jar


BIN
target/lib/error_prone_annotations-2.3.4.jar


BIN
target/lib/ezmorph-1.0.6.jar


BIN
target/lib/fastjson-1.2.57.jar


BIN
target/lib/feign-core-10.10.1.jar


BIN
target/lib/feign-form-3.8.0.jar


BIN
target/lib/feign-form-spring-3.8.0.jar


BIN
target/lib/feign-hystrix-10.10.1.jar


BIN
target/lib/feign-slf4j-10.10.1.jar


BIN
target/lib/gentlyWEB-utils-1.1.GA.jar


BIN
target/lib/gson-2.8.6.jar


BIN
target/lib/guava-2.8.4.jar


BIN
target/lib/guava-20.0.jar


BIN
target/lib/guice-4.1.0.jar


BIN
target/lib/hamcrest-2.2.jar


BIN
target/lib/hibernate-validator-6.1.5.Final.jar


BIN
target/lib/httpclient-4.5.12.jar


BIN
target/lib/httpcore-4.4.13.jar


BIN
target/lib/hutool-all-4.4.5.jar


BIN
target/lib/hystrix-core-1.5.18.jar


BIN
target/lib/hystrix-javanica-1.5.18.jar


BIN
target/lib/hystrix-metrics-event-stream-1.5.18.jar


BIN
target/lib/hystrix-serialization-1.5.18.jar


BIN
target/lib/jackson-annotations-2.11.0.jar


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff