Commit 374b7bdf authored by gao's avatar gao

监控系统(微信消息推送)

1.0 签名服务器监控
2.0 可信平台监控
3.0 服务状态监控
parent f2f06587
<component name="ArtifactManager">
<artifact name="LegalPersonMonitor:jar">
<output-path>$PROJECT_DIR$/out/artifacts/LegalPersonMonitor_jar</output-path>
<root id="root">
<element id="directory" name="lib">
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.2" />
<element id="library" level="project" name="commons-httpclient-3.1 (2)" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.2" />
<element id="library" level="project" name="Maven: commons-beanutils:commons-beanutils:1.8.0" />
<element id="library" level="project" name="Maven: commons-codec:commons-codec:1.9" />
<element id="library" level="project" name="Maven: commons-collections:commons-collections:3.2.1" />
<element id="library" level="project" name="Maven: commons-lang:commons-lang:2.5" />
<element id="library" level="project" name="Maven: commons-logging:commons-logging:1.1.1" />
<element id="library" level="project" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" />
<element id="library" level="project" name="Maven: net.sf.json-lib:json-lib:jdk15:2.4" />
<element id="library" level="project" name="Maven: org.apache.httpcomponents:httpclient:4.5.3" />
<element id="library" level="project" name="Maven: org.apache.httpcomponents:httpcore:4.4.6" />
<element id="library" level="project" name="Maven: org.springframework:spring-aop:4.3.10.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-beans:4.3.10.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-context-support:4.3.10.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-context:4.3.10.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-core:4.3.10.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-expression:4.3.10.RELEASE" />
<element id="library" level="project" name="Spring-4.3.13.RELEASE" />
<element id="archive" name="LegalPersonMonitor.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/META-INF/MANIFEST.MF" />
</element>
<element id="module-output" name="LegalPersonMonitor" />
</element>
<element id="directory" name="config">
<element id="file-copy" path="$PROJECT_DIR$/config/cssconfig.properties" />
</element>
</element>
</root>
</artifact>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="LegalPersonMonitor" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="LegalPersonMonitor" target="1.8" />
</bytecodeTargetLevel>
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AliAccessStaticViaInstance" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliAccessToNonThreadSafeStaticFieldFromInstance" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliDeprecation" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliEqualsAvoidNull" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliWrapperTypeEquality" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAbstractClassShouldStartWithAbstractNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidCommentBehindStatement" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidComplexCondition" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidConcurrentCompetitionRandom" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidManuallyCreateThread" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidMissUseOfMathRandom" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidNewDateGetTime" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidPatternCompileInMethod" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidReturnInFinally" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidStartWithDollarAndUnderLineNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidUseTimer" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaBooleanPropertyShouldNotStartWithIs" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassCastExceptionWithSubListToArrayList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassCastExceptionWithToArray" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassMustHaveAuthor" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaClassNamingShouldBeCamel" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaCollectionInitShouldAssignCapacity" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaCommentsMustBeJavadocFormat" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaConcurrentExceptionWithModifyOriginSubList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaConstantFieldShouldBeUpperCase" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaCountDownShouldInFinally" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaDontModifyInForeachCircle" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaEnumConstantsMustHaveComment" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaExceptionClassShouldEndWithException" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaIbatisMethodQueryForList" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaLowerCamelCaseVariableNaming" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaMethodReturnWrapperType" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPackageNaming" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoMustOverrideToString" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoMustUsePrimitiveField" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoNoDefaultValue" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaRemoveCommentedCode" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaServiceOrDaoClassShouldEndWithImpl" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaStringConcat" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaSwitchStatement" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaTestClassShouldEndWithTestNaming" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadLocalShouldRemove" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadPoolCreation" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadShouldSetName" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaTransactionMustHaveRollback" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaUndefineMagicConstant" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaUnsupportedExceptionWithModifyAsList" enabled="false" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaUseQuietReferenceNotation" enabled="false" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="INNER_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="METHOD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
</value>
</option>
<option name="FIELD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="IGNORE_DEPRECATED" value="false" />
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
<option name="myAdditionalJavadocTags" value="date" />
</inspection_tool>
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="false" level="CRITICAL" enabled_by_default="false" />
</profile>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JUnitGeneratorProjectSettings">
<option name="outputFilePattern" value="${SOURCEPATH}/JunitTest/${PACKAGE}/${FILENAME}" />
<option name="vmTemplates">
<map>
<entry key="JUnit 3" value="######################################################################################## &#10;## &#10;## Available variables: &#10;## $entryList.methodList - List of method composites &#10;## $entryList.privateMethodList - List of private method composites &#10;## $entryList.fieldList - ArrayList of class scope field names &#10;## $entryList.className - class name &#10;## $entryList.packageName - package name &#10;## $today - Todays date in MM/dd/yyyy format &#10;## &#10;## MethodComposite variables: &#10;## $method.name - Method Name &#10;## $method.signature - Full method signature in String form &#10;## $method.reflectionCode - list of strings representing commented out reflection code to access method (Private Methods) &#10;## $method.paramNames - List of Strings representing the method's parameters' names &#10;## $method.paramClasses - List of Strings representing the method's parameters' classes &#10;## &#10;## You can configure the output class name using &quot;testClass&quot; variable below. &#10;## Here are some examples: &#10;## Test${entry.ClassName} - will produce TestSomeClass &#10;## ${entry.className}Test - will produce SomeClassTest &#10;## &#10;######################################################################################## &#10;## &#10;#macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end &#10;## Iterate through the list and generate testcase for every entry. &#10;#foreach ($entry in $entryList) &#10;#set( $testClass=&quot;${entry.className}Test&quot;) &#10;## &#10;package test.$entry.packageName; &#10;&#10;import junit.framework.Test; &#10;import junit.framework.TestSuite; &#10;import junit.framework.TestCase; &#10;&#10;/** &#10;* ${entry.className} Tester. &#10;* &#10;* @author &lt;Authors name&gt; &#10;* @since &lt;pre&gt;$today&lt;/pre&gt; &#10;* @version 1.0 &#10;*/ &#10;public class $testClass extends TestCase { &#10;public $testClass(String name) { &#10;super(name); &#10;} &#10;&#10;public void setUp() throws Exception { &#10;super.setUp(); &#10;} &#10;&#10;public void tearDown() throws Exception { &#10;super.tearDown(); &#10;} &#10;&#10;#foreach($method in $entry.methodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;} &#10;&#10;#end &#10;&#10;#foreach($method in $entry.privateMethodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;#foreach($string in $method.reflectionCode) &#10;$string &#10;#end &#10;} &#10;&#10;#end &#10;&#10;public static Test suite() { &#10;return new TestSuite(${testClass}.class); &#10;} &#10;} &#10;#end" />
<entry key="JUnit 4" value="######################################################################################## &#10;## &#10;## Available variables: &#10;## $entryList.methodList - List of method composites &#10;## $entryList.privateMethodList - List of private method composites &#10;## $entryList.fieldList - ArrayList of class scope field names &#10;## $entryList.className - class name &#10;## $entryList.packageName - package name &#10;## $today - Todays date in MM/dd/yyyy format &#10;## &#10;## MethodComposite variables: &#10;## $method.name - Method Name &#10;## $method.signature - Full method signature in String form &#10;## $method.reflectionCode - list of strings representing commented out reflection code to access method (Private Methods) &#10;## $method.paramNames - List of Strings representing the method's parameters' names &#10;## $method.paramClasses - List of Strings representing the method's parameters' classes &#10;## &#10;## You can configure the output class name using &quot;testClass&quot; variable below. &#10;## Here are some examples: &#10;## Test${entry.ClassName} - will produce TestSomeClass &#10;## ${entry.className}Test - will produce SomeClassTest &#10;## &#10;######################################################################################## &#10;## &#10;#macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end &#10;## Iterate through the list and generate testcase for every entry. &#10;#foreach ($entry in $entryList) &#10;#set( $testClass=&quot;${entry.className}Test&quot;) &#10;## &#10;package JunitTest.$entry.packageName; &#10;&#10;import org.junit.Test; &#10;import org.junit.Before; &#10;import org.junit.After; &#10;&#10;/** &#10;* ${entry.className} Tester. &#10;* &#10;* @author Gaoxiang &#10;* @since &lt;pre&gt;$date&lt;/pre&gt; &#10;* @version 1.0 &#10;*/ &#10;public class $testClass { &#10;&#10;@Before&#10;public void before() throws Exception { &#10;} &#10;&#10;@After&#10;public void after() throws Exception { &#10;} &#10;&#10;#foreach($method in $entry.methodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;@Test&#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;} &#10;&#10;#end &#10;&#10;#foreach($method in $entry.privateMethodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;@Test&#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;#foreach($string in $method.reflectionCode) &#10;$string &#10;#end &#10;} &#10;&#10;#end &#10;} &#10;#end" />
</map>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinCommonCompilerArguments">
<option name="languageVersion" value="1.1" />
<option name="apiVersion" value="1.1" />
</component>
</project>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0">
<CLASSES>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.2">
<CLASSES>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-core/2.9.2/jackson-core-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-core/2.9.2/jackson-core-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-core/2.9.2/jackson-core-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.2">
<CLASSES>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-databind/2.9.2/jackson-databind-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-databind/2.9.2/jackson-databind-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/com/fasterxml/jackson/core/jackson-databind/2.9.2/jackson-databind-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-beanutils:commons-beanutils:1.8.0">
<CLASSES>
<root url="jar://D:/Work/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-codec:commons-codec:1.9">
<CLASSES>
<root url="jar://D:/Work/commons-codec/commons-codec/1.9/commons-codec-1.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/commons-codec/commons-codec/1.9/commons-codec-1.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/commons-codec/commons-codec/1.9/commons-codec-1.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-collections:commons-collections:3.2.1">
<CLASSES>
<root url="jar://D:/Work/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-lang:commons-lang:2.5">
<CLASSES>
<root url="jar://D:/Work/commons-lang/commons-lang/2.5/commons-lang-2.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/commons-lang/commons-lang/2.5/commons-lang-2.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/commons-lang/commons-lang/2.5/commons-lang-2.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-logging:commons-logging:1.1.1">
<CLASSES>
<root url="jar://D:/Work/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.ezmorph:ezmorph:1.0.6">
<CLASSES>
<root url="jar://D:/Work/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.json-lib:json-lib:jdk15:2.4">
<CLASSES>
<root url="jar://D:/Work/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/net/sf/json-lib/json-lib/2.4/json-lib-2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/net/sf/json-lib/json-lib/2.4/json-lib-2.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpclient:4.5.3">
<CLASSES>
<root url="jar://D:/Work/org/apache/httpcomponents/httpclient/4.5.3/httpclient-4.5.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/apache/httpcomponents/httpclient/4.5.3/httpclient-4.5.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/apache/httpcomponents/httpclient/4.5.3/httpclient-4.5.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpcore:4.4.6">
<CLASSES>
<root url="jar://D:/Work/org/apache/httpcomponents/httpcore/4.4.6/httpcore-4.4.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/apache/httpcomponents/httpcore/4.4.6/httpcore-4.4.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/apache/httpcomponents/httpcore/4.4.6/httpcore-4.4.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-aop:4.3.10.RELEASE">
<CLASSES>
<root url="jar://D:/Work/org/springframework/spring-aop/4.3.10.RELEASE/spring-aop-4.3.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/springframework/spring-aop/4.3.10.RELEASE/spring-aop-4.3.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/springframework/spring-aop/4.3.10.RELEASE/spring-aop-4.3.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-beans:4.3.10.RELEASE">
<CLASSES>
<root url="jar://D:/Work/org/springframework/spring-beans/4.3.10.RELEASE/spring-beans-4.3.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/springframework/spring-beans/4.3.10.RELEASE/spring-beans-4.3.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/springframework/spring-beans/4.3.10.RELEASE/spring-beans-4.3.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-context:4.3.10.RELEASE">
<CLASSES>
<root url="jar://D:/Work/org/springframework/spring-context/4.3.10.RELEASE/spring-context-4.3.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/springframework/spring-context/4.3.10.RELEASE/spring-context-4.3.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/springframework/spring-context/4.3.10.RELEASE/spring-context-4.3.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-context-support:4.3.10.RELEASE">
<CLASSES>
<root url="jar://D:/Work/org/springframework/spring-context-support/4.3.10.RELEASE/spring-context-support-4.3.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/springframework/spring-context-support/4.3.10.RELEASE/spring-context-support-4.3.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/springframework/spring-context-support/4.3.10.RELEASE/spring-context-support-4.3.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-core:4.3.10.RELEASE">
<CLASSES>
<root url="jar://D:/Work/org/springframework/spring-core/4.3.10.RELEASE/spring-core-4.3.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/springframework/spring-core/4.3.10.RELEASE/spring-core-4.3.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/springframework/spring-core/4.3.10.RELEASE/spring-core-4.3.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-expression:4.3.10.RELEASE">
<CLASSES>
<root url="jar://D:/Work/org/springframework/spring-expression/4.3.10.RELEASE/spring-expression-4.3.10.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/Work/org/springframework/spring-expression/4.3.10.RELEASE/spring-expression-4.3.10.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/Work/org/springframework/spring-expression/4.3.10.RELEASE/spring-expression-4.3.10.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Spring-4.3.13.RELEASE" type="spring">
<properties version="4.3.13.RELEASE" />
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/spring-aspects-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-context-support-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-context-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-core-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-expression-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-beans-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-instrument-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-instrument-tomcat-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-jms-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-jdbc-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-messaging-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-oxm-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-test-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-orm-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-tx-4.3.13.RELEASE.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/commons-logging-1.2.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/aopalliance-1.0.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/spring-aop-4.3.13.RELEASE.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="commons-httpclient-3.1 (2)">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/commons-httpclient-3.1.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/commons-logging-1.1.1.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/jit-pkitool-2.3.0.25-beta2.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/jit-pkivstk-jdk15-1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/LegalPersonMonitor.iml" filepath="$PROJECT_DIR$/LegalPersonMonitor.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SmartFoxProjectConfig">
<option name="projectInspectionClosed" value="true" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4"> <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true"> <component name="FacetManager">
<exclude-output /> <facet type="Spring" name="Spring">
<configuration>
<fileset id="fileset" name="Spring Application Context" removed="false">
<file>file://$MODULE_DIR$/src/main/resources/applicationContext.xml</file>
</fileset>
</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$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <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> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="commons-httpclient-3.1 (2)" level="project" />
<orderEntry type="library" name="Spring-4.3.13.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.2" level="project" />
<orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:jdk15:2.4" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.0" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.5" 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: org.apache.httpcomponents:httpclient:4.5.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.6" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:4.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.10.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.10.RELEASE" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
ServerURL=http://192.168.0.110:8000/signserver/service/xml
#ServerURL=http\://192.168.1.13\:8000/signserver/service/xml
#ServerURL=http://192.168.253.126:8000/signserver/service/xml
#ServerURL=http://172.16.40.123:8000/signserver/service/xml
DigestAlg=sm3
#Encrypt Algorithm: des3/scb2
EncAlg=sm4
CertBaseInfo = version;issuerdn;subjectdn;serialnumber;notbefore;notafter
TSACertBaseInfo = issuerdn;subjectdn;serialnumber;signedTime;signedTSA;signedTimeByMS
CertExtendInfo =
AppID=
CertAlias =
BaseInfo =digestalg;digestdata;plaindata;dscert
SendMsgFormat=0
HashActionPosition=0
PrintLog=false
#console/file/log4j ####log4j not implement
logTarget=console
logFilePath=/temp/jit.dss.vstk.log
#rfc3161/rfc2630
TSAType=rfc3161
#dsCert/issuerDNAndSN/CertId
p1VerifyCertId=CertId
Compatible=true
dss.client.class=cn.com.jit.assp.client.DSSClientHttpUrlConnectionImpl
#dss.client.class=cn.com.jit.assp.client.DSSClientHttpClientImpl
#default/encAfterDec/secretEnvelop(use this mode after using VCTK do envelop) secretEnvelop:develop->RSAdecrypt->RSAencrypt->envelop
envelopType=default
#default unit KB and default size is 0,0 is not block;
packageSize=0
#default:10000 unit: ms
timeout=50000
connectTimeOut=50000
# default : system unicode
FileSystemCharSet=UTF-8
vstkVersion=20
EncryptMode=ecb
#package size every time, unit is byte
send_size=1048576
#bigger than this will take big transfer modle, unit is byte
bigdata_limit=20971520
first_read_timeout=10000
\ No newline at end of file
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gtyingxin</groupId>
<artifactId>LegalPersonMonitor</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>4.3.10.RELEASE</spring.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.2</version>
</dependency>
<!--JsonString 转 bean-->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.legalPersonMonitor.auth;
import com.legalPersonMonitor.config.AuthModeConfig;
import com.legalPersonMonitor.config.ParameterConfig;
import com.legalPersonMonitor.config.TaskConfig;
import com.legalPersonMonitor.data.*;
import com.legalPersonMonitor.utils.FormatBytesUtil;
import sun.misc.BASE64Decoder;
import java.io.IOException;
/**
* Created by gaoxiang on 2018/1/22.
*/
public class Authentication {
/**
* businessSerialNumberByte 流水号 byte[] 类型
* customerId 客户号 8字节 共用
* terminalId 终端号 2字节 共用 1.0写死 2.0用应用名称 FormatBytesUtil.hexStringToBytes(preAuthBean.getAppName());
* certificateNumber 证书标识 or 业务站点
* authApplyRetainData 客户端传入认证保留数据String
* authRetainTwoDataDesign 传入1.0 认证平台认证保留 2项数据 ( 已加密)
* authRetainFourDataDesign 传入1.0 认证平台认证保留 4项数据 ( 已加密)
* idcardAuthDataBase64DecodeAfter 传入1.0 认证平台认证ID验证数据( 已加密)
* pictureAuthDataBase64DecodeAfter 传入1.0 认证平台认证人像 ( 已加密)
* authCodeDataBase64DecodeAfter 传入1.0 认证平台认证认证码数据 ( 已加密)
* mode 认证模式
* authDate 根据模式组合成的数据
* version 协议版本 2字节 0x0001 共用
* commandType 命令类型 1字节 0x00(请求)0x01(应答) 共用
* command 命令 1字节 0x00(身份认证申请)0x01(身份认证) 修改值的内容为1
* commandContent 命令内容 1字节 保留 0x00 共用
* operation 操作 1字节 保留 0x00 共用
* auSPData 身份认证 二包 Socket数据报文
* authReturn 身份认证 1.0 平台二包 响应结果
* checkSignResult 验签是否正确
*/
private byte[] businessSerialNumberByte;
private byte[] customerId;
private byte[] terminalId;
private byte[] timeStamp;
private byte[] certificateNumber;
private byte[] authRetainTwoDataDesign=null;
private byte[] idcardAuthDataBase64DecodeAfter=null;
private byte[] pictureAuthDataBase64DecodeAfter=null;
private byte[] authCodeDataBase64DecodeAfter=null;
private byte[] authDataBase64Decode=null;
private byte[] authDate=null;
private byte[] version=new byte[]{0, 1};
private byte[] commandType = new byte[]{0};
private byte[] command = new byte[]{1};
private byte[] commandContent = new byte[]{0};
private byte[] operation = new byte[]{0};
private byte[] auSPData;
private byte[] customerId_Length=new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
private byte[] timeStamp_Length=new byte[] { 1, 2,3,4};
public byte[] authExecute(AuthRequestBean authRequestBean){
customerId= FormatBytesUtil.getBytesFromString(customerId_Length,authRequestBean.getCustomerNumber());
terminalId= ParameterConfig.terminalId;
timeStamp= FormatBytesUtil.getBytesFromString(timeStamp_Length,authRequestBean.getTimeStamp());
businessSerialNumberByte=FormatBytesUtil.hexStringToBytes(authRequestBean.getBusinessSerialNumber());
certificateNumber=ParameterConfig.certificateNumber;
getauthRetainTwoDataDesign(authRequestBean.getAuthApplyRetainData());
idcardAuthDataBase64DecodeAfter=dataProcessingBase64Decode(TaskConfig.TASK_ID_DATA,authRequestBean.getIdcardAuthData());
authCodeDataBase64DecodeAfter=dataProcessingBase64Decode(TaskConfig.TASK_AUTHCODE_DATA,authRequestBean.getAuthCode());
pictureAuthDataBase64DecodeAfter=dataProcessingBase64Decode(TaskConfig.TASK_PIC_DATA,authRequestBean.getPhotoData());
AuthData au_0X4F = new AuthData(customerId, terminalId, timeStamp,businessSerialNumberByte, AuthModeConfig.IDENTITYMODEL_0X4F,
idcardAuthDataBase64DecodeAfter, authCodeDataBase64DecodeAfter, pictureAuthDataBase64DecodeAfter, authRetainTwoDataDesign, certificateNumber);
authDate = au_0X4F.getAuthenticationData();
SocketPackage auSP = new SocketPackage(version, commandType, command, commandContent, operation, authDate);
auSPData = auSP.getSocketPackage();
return auSPData;
}
public void getauthRetainTwoDataDesign(AuthApplyRetainBean retainDate){
String name=retainDate.getName();
String idNumber=retainDate.getIdNumber();
authRetainTwoDataDesign = new RetainData(name, idNumber, null, null).getReservasionBytes();
}
private byte[] excuteBase64Decode(String encodeData) throws IOException {
byte[] originalData= new BASE64Decoder().decodeBuffer(encodeData);
return originalData;
}
private byte[] dataProcessingBase64Decode(String dataName,String data ){
switch (dataName){
case TaskConfig.TASK_ID_DATA:
authDataBase64Decode=FormatBytesUtil.hexStringToBytes(data);
break;
case TaskConfig.TASK_AUTHCODE_DATA:
authDataBase64Decode=FormatBytesUtil.hexStringToBytes(data);
break;
case TaskConfig.TASK_PIC_DATA:
try {
authDataBase64Decode = excuteBase64Decode(data);
} catch (IOException e) {
e.printStackTrace();
}
break;
}
return authDataBase64Decode;
}
}
package com.legalPersonMonitor.config;
/**
* Created by gaoxiang on 2018/1/12.
*/
public class AuthModeConfig {
public static final byte[] IDENTITYMODEL_0X4F = new byte[] { 0x4f };
}
package com.legalPersonMonitor.config;
import com.legalPersonMonitor.utils.FormatBytesUtil;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* Created by gaoxiang on 2018/1/22.
*/
public class ParameterConfig {
public static final String strDN = "ywzd49";
public static final String strDigestAlg = "sm3";
// 终端号 2字节 共用
public static final byte[] terminalId = new byte[] { 1, 2 };
public static final byte[] certificateNumber = FormatBytesUtil.copyByteToAnother(new byte[32], new byte[] {121, 119, 122, 100, 52, 57 });
// UDP Socket参数
public static final String ip = "111.200.45.2";
public static final int port = 8283;
public static InetAddress ia = null;
static {
try {
ia = InetAddress.getByName(ip);
} catch (UnknownHostException e) {
System.out.println("InetAddress 初始化失败,请检查Constans类中的host地址。");
e.printStackTrace();
}
}
/**
*申请数据( 经过签名)
*/
public static final byte[] PREAUTH_BYTE=new byte[]{0, 1, 0, 0, 0, 0, 54, 0, 0, 0, 103, 116, 121, 120, 48, 49, 7, 8, 1, 2, 49, 52, 48, 51, 118, 49, 46, 48, 118, 49, 46, 48, 121, 119, 122, 100, 52, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 48, 69, 2, 32, 102, -43, -75, 109, -123, -84, 50, 125, -123, 31, 72, -13, -30, -94, 118, -100, -61, 18, -78, -83, 67, 53, -34, -23, 24, -27, -33, 59, -49, -117, 33, 56, 2, 33, 0, -111, -57, -112, 33, 74, -30, 53, 0, 112, -88, 38, 79, 74, 96, -21, 123, -31, -99, 60, -79, -67, 97, 58, 121, 86, -55, -59, -22, 53, -91, -75, -13};
/**
* 验签数据
*/
public static final byte[] VERIFICANTION_BYTE=new byte[]{0, 1, 1, 0, 0, 0, -111, 0, 0, 0, 103, 116, 121, 120, 48, 49, 7, 8, 1, 2, 49, 52, 48, 51, 65, 48, 50, 36, 55, 56, -104, 87, 40, 88, 0, 68, 56, 69, 48, 66, 67, 57, 54, 65, 56, 49, 49, 65, 56, 66, 68, 0, 38, 48, 68, 2, 32, 23, 116, 45, -41, -70, 68, 116, -76, -80, -123, -39, 94, -93, -39, -44, -89, 127, 4, 94, -57, 65, -2, 51, -69, -58, -127, 92, -37, -85, -26, -121, 36, 2, 32, 34, -116, 9, 53, 89, -61, 101, -83, -20, 86, 75, -14, 9, 102, -85, -103, -125, -98, 107, -59, 50, -120, -111, -38, -102, -99, -51, 69, -75, 35, -30, -78, 114, 122, 102, 119, 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 48, 70, 2, 33, 0, -30, -37, 74, 44, 6, -12, 34, -114, -121, 19, 93, -104, -44, -49, 79, 51, 40, -118, 112, 92, -97, 21, 12, -101, 51, -74, -80, 10, 99, -116, -40, 125, 2, 33, 0, -35, 35, -79, -63, -49, -102, -114, -60, 9, -86, -85, -77, -46, -40, 101, -104, -52, 61, -116, 37, -20, -5, 23, 78, -47, 74, -15, -113, -84, -99, -110, -93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/**
*申请参数
*/
public static final String PREAUTH_JSONSTR ="{\n" +
" \"appName\": \"国投盈信\",\n" +
" \"authCodeControlVersion\": \"v1.0.0.1\",\n" +
" \"authMode\": \"0x1F\",\n" +
" \"cardReaderVersion\": \"v1.0.0.1\",\n" +
" \"customerNumber\": \"gtyx01\",\n" +
" \"liveDetectionControlVersion\": \"v1.0.0.1\",\n" +
" \"timeStamp\": \"140322323233325\"\n" +
" }";
public static final String AUTH_JSONSTR="{\n" +
" \"customerNumber\":\"gtyx01\",\n" +
" \"appName\":\"国投盈信\",\n" +
" \"timeStamp\":\"1516341838068\",\n" +
" \"businessSerialNumber\":\"413034243240499C2D\",\n" +
" \"authMode\":\"0x4f\",\n" +
" \"authApplyRetainData\":\n" +
"\t {\"name\":\"刘主雪\",\n" +
"\t \"idNumber\":\"142625199212162428\",\n" +
" \"enableDate\":\"20090716\",\n" +
" \"expireDate\":\"20190716\"},\n" +
" \"idcardAuthData\":\"0300F6A5BFC3ADCA157217E103C86BE0174B1CFBCBFA782CBF0DC0C8C249E2BB4BD5323031363034313831303434343039393301016C51895BE8902C7B004E1478767A40620020002000200020002000200020320030003100360030003400310038003200300031003900300037003100360090819995EE809BD6E9649F1BAC033AE23856DD281EA70670038A6740203500E2F6A5BFC3ADCA157217E103C86BE0174B1CFBCBFA782CBF0DC0C8C249E2BB4BD51FBED509A60453B82C41607299E0B5141E3BC7733CBDD5C9CB656A67D4EF66B8000130460221008F47E438B75E537763BA0F04533213C6BA4CBC411C182605481DDCE4A0C24A36022100B28185507A7D745A91DFAA5DB9D4316C06EB445D60E7241C533C7EAFF4BC2EBB4D4949423241594B4B6F45637A31554741515143413643434163677767674845416745414D5948524D49484F416745414D4430774D54454C4D416B474131554542684D43513034784554415042674E5642416F544345644D5131524A524441784D513877445159445651514445775A4854454E424D444543434839367753726955436E504D41304743537142484D395641594974417755414248737765514968414F56446453376E566A46466D4F676F4C626F2B32696C38596E3073424D4E38532B48634D347652707968784169425833326C385554782F693079565A4E3161672B432F675835342F345974464E7669734D344358526E6C4B515167724E5945486F37527A7869493032707A6C67725A6F613854754966426353736F2B476A487A76574A5863304545436A4D3043563465767951656F4171366A32724952517767656F4743697142484D39564267454541674577435159484B6F45637A3155426149434230497470753546596D4A6B7556544B516863413237584B58624A59474F3176582B48334869676942414838376542536C676E70577A6D5738455969613064725658514F362B3463587A6869614C6269446B687A4A6D36785559495A3978455757444A6E493757565539416B527A49365172436A347A396A54772F534232725446594B6A492F694A7058397138615561584C48444237586D65412B793534652B357764746974796D72556679577945773331315448383530517673793849496478346A78364367563956326B6858796938463077536F777A652B3053744F4C7739736A6C6C70356F6450316567376E37526871365A6B396C36414A61664E4A31714D626B6C7979654E682B494434364775417361456D75673D\",\n" +
" \"authCode\":\"B8014D4949425267594B4B6F45637A31554741515143413643434154597767674579416745414D5948524D49484F416745414D4430774D54454C4D416B474131554542684D43513034784554415042674E5642416F544345644D5131524A524441784D513877445159445651514445775A4854454E424D444543434839367753726955436E504D41304743537142484D395641594974417755414248737765514967655A476B705077427839706F6754666B464C554F322B444B6F52676E49566F3466676678646A574B716C634349514362756573732F6C702F54516E4C56366B5A55374B796C33764E6A7255585550325463457A345777552F32515167684E704F41426E4354436E49516A5A6E57747032654245574F434435327550514F6A56314E7462543541514545454F42355045356F797673616A58752B78315050386B775751594B4B6F45637A315547415151434154414A4267637167527A505651466F674544636D386732346D326936556E4B41316342536D456A6F4E587846336567715435432F476F436E674B2B4A6A506C566B634147535034654F6E70554C46696749697664785369563544575862787A516C4B58466278340000\",\n" +
" \"photoData\":\"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\"\n" +
" }";
}
package com.legalPersonMonitor.config;
/**
* Created by gaoxiang on 2018/1/15.
*/
public class TaskConfig {
/**人像编码任务*/
public static final String TASK_PIC_DATA = "TASK_PIC_DATA";
/**ID编码任务*/
public static final String TASK_ID_DATA = "TASK_ID_DATA";
/**认证码编码任务*/
public static final String TASK_AUTHCODE_DATA = "TASK_AUTHCODE_DATA";
}
package com.legalPersonMonitor.connections;
import org.apache.http.*;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
/**
* Created by zhangdahui on 2017/5/18.
*/
public class HttpClientPool {
public static String postRequest(String url, String body) {
HttpPost httpPost = new HttpPost(url);
CloseableHttpClient hc = HttpClients.createDefault();
CloseableHttpResponse response = null;
StringEntity se = new StringEntity(body, "UTF-8");
se.setContentType("application/json");
httpPost.setEntity(se);
String respStr="";
try {
response = hc.execute(httpPost);
HttpEntity et = response.getEntity();
respStr = EntityUtils.toString(et);
return respStr;
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return respStr;
}
}
package com.legalPersonMonitor.connections;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.legalPersonMonitor.data.AccessTokenRequset;
import com.legalPersonMonitor.data.AccessTokenResponse;
import com.legalPersonMonitor.data.WxResponseBean;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
public class SendRequset {
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
// Map<String, List<String>> map = connection.getHeaderFields();
// // 遍历所有的响应头字段
// for (String key : map.keySet()) {
// System.out.println(key + "--->" + map.get(key));
// }
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
//获取凭证
public AccessTokenResponse getAccessToken(AccessTokenRequset accessTokenRequset){
try {
String s=sendGet(accessTokenRequset.getAccessTokenUrl(), "corpid="+accessTokenRequset.getCorpid()+"&corpsecret="+accessTokenRequset.getCorpsecret());
ObjectMapper mapper = new ObjectMapper();
AccessTokenResponse accessTokenResponse=mapper.readValue(s, AccessTokenResponse.class);
return accessTokenResponse;
} catch (Exception e) {
return null;
}
}
//发送信息
public WxResponseBean sendTextMessage(AccessTokenResponse accessTokenResponse, String sendjson){
ObjectMapper mapper = new ObjectMapper();
String result=sendPost("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+accessTokenResponse.getAccess_token(), sendjson);
WxResponseBean wxResultMassage=new WxResponseBean();
try {
wxResultMassage = mapper.readValue(result,WxResponseBean.class);
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return wxResultMassage;
}
}
package com.legalPersonMonitor.connections;
import com.legalPersonMonitor.config.ParameterConfig;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
* @author gao
*/
public class SocketSender {
public static byte[] sendSocketPackage(byte[] socketPackage) {
DatagramPacket sendPacket = new DatagramPacket(socketPackage, socketPackage.length, ParameterConfig.ia, ParameterConfig.port);
DatagramPacket receivePacket = new DatagramPacket(new byte[300], 300);
try (DatagramSocket udpClient = new DatagramSocket()) {
udpClient.send(sendPacket);
udpClient.setSoTimeout(10000);
udpClient.receive(receivePacket);
return receivePacket.getData();
} catch (SocketException e) {
System.out.println("udpClient创建失败");
e.printStackTrace();
} catch (IOException e) {
System.out.println("send/receive调用失败");
e.printStackTrace();
}
return null;
}
}
package com.legalPersonMonitor.data;
/**
* Created by gaoxiang on 2017/12/29.
*/
public class AccessTokenRequset {
private String accessTokenUrl;
private String corpid;
private String corpsecret;
public String getAccessTokenUrl() {
return accessTokenUrl;
}
public void setAccessTokenUrl(String accessTokenUrl) {
this.accessTokenUrl = accessTokenUrl;
}
public String getCorpid() {
return corpid;
}
public void setCorpid(String corpid) {
this.corpid = corpid;
}
public String getCorpsecret() {
return corpsecret;
}
public void setCorpsecret(String corpsecret) {
this.corpsecret = corpsecret;
}
public AccessTokenRequset(String accessTokenUrl, String corpid, String corpsecret) {
super();
this.accessTokenUrl = accessTokenUrl;
this.corpid = corpid;
this.corpsecret = corpsecret;
}
public AccessTokenRequset() {
super();
}
@Override
public String toString() {
return "AccessTokenRequset [accessTokenUrl=" + accessTokenUrl + ", corpid=" + corpid + ", corpsecret="
+ corpsecret + "]";
}
}
package com.legalPersonMonitor.data;
/**
* Created by gaoxiang on 2017/12/29.
*/
public class AccessTokenResponse {
private int errcode;
private String errmsg;
private String access_token;
private int expires_in;
public int getErrcode() {
return errcode;
}
public void setErrcode(int errcode) {
this.errcode = errcode;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public int getExpires_in() {
return expires_in;
}
public void setExpires_in(int expires_in) {
this.expires_in = expires_in;
}
public AccessTokenResponse(String access_token, int expires_in) {
super();
this.access_token = access_token;
this.expires_in = expires_in;
}
public AccessTokenResponse() {
super();
}
@Override
public String toString() {
return "AccessTokenResponse [access_token=" + access_token + ", expires_in=" + expires_in + "]";
}
}
package com.legalPersonMonitor.data;
/**
* Created by gaoxiang on 2017/12/29.
*/
public class AuthApplyRetainBean {
private String name;
private String idNumber;
private String enableDate;
private String expireDate;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
public String getEnableDate() {
return enableDate;
}
public void setEnableDate(String enableDate) {
this.enableDate = enableDate;
}
public String getExpireDate() {
return expireDate;
}
public void setExpireDate(String expireDate) {
this.expireDate = expireDate;
}
}
package com.legalPersonMonitor.data;
import com.legalPersonMonitor.utils.FormatBytesUtil;
public class AuthData {
/**
* lengthOfTwo ID验证数据字段及认证吗数据字段总长 2字节
* lengthOfIdCheck ID验证数据长度 2字节
* lengthOfAuthCodeData 认证码数据长度 2字节
* lengthOfPicture 照片长度 4字节
* lengthOfReservasion 认证申请保留数据长度 2字节
*/
private byte[] lengthOfTwo;
private byte[] lengthOfIdCheck;
private byte[] lengthOfAuthCodeData;
private byte[] lengthOfPicture;
private byte[] lengthOfReservasion;
private byte[] customerId;
private byte[] terminalId;
private byte[] timestamp;
private byte[] streamNumber;
private byte[] identityModel;
private byte[] idCheckData;
private byte[] authCodeData;
private byte[] pictureData;
private byte[] reservationData;
private byte[] certificateNumber;
/**
*
* @param customerId 客户号 8字节
* @param terminalId 终端号 2字节
* @param timestamp 时间戳 4字节
* @param streamNumber 业务流水号 9字节
* @param identityModel 认证模式 1字节
* @param idCheckData ID验证数据 变长 可为空
* @param authCodeData 认证码数据 变长 可为空
* @param pictureData 照片数据 变长 可为空
* @param reservationData 认证申请保留数据 变长 可为空
* @param certificateNumber 证书序列号 32字节
*/
public AuthData(byte[] customerId, byte[] terminalId, byte[] timestamp, byte[] streamNumber, byte[] identityModel,
byte[] idCheckData, byte[] authCodeData, byte[] pictureData, byte[] reservationData, byte[] certificateNumber) {
super();
this.customerId = customerId;
this.terminalId = terminalId;
this.timestamp = timestamp;
this.streamNumber = streamNumber;
this.identityModel = identityModel;
int idCheckLengthTemp = 0;
int verificationLengthTemp = 0;
this.lengthOfIdCheck = new byte[] { 0, 0 };
if (idCheckData != null) {
idCheckLengthTemp = idCheckData.length;
this.lengthOfIdCheck = FormatBytesUtil.getByteOfShort((short) idCheckData.length);
}
this.idCheckData = idCheckData;
this.lengthOfAuthCodeData = new byte[] { 0, 0 };
if (authCodeData != null) {
verificationLengthTemp = authCodeData.length;
this.lengthOfAuthCodeData = FormatBytesUtil.getByteOfShort((short) authCodeData.length);
}
this.authCodeData = authCodeData;
this.lengthOfTwo = FormatBytesUtil.getByteOfShort((short) (idCheckLengthTemp + verificationLengthTemp + 4));
this.lengthOfPicture = new byte[] { 0, 0, 0, 0 };
if (pictureData != null) {
this.lengthOfPicture = FormatBytesUtil.getBytesOfInt(pictureData.length);
}
this.pictureData = pictureData;
this.lengthOfReservasion = new byte[] { 0, 0 };
if (reservationData != null) {
this.lengthOfReservasion = FormatBytesUtil.getByteOfShort((short) reservationData.length);
}
this.reservationData = reservationData;
this.certificateNumber = certificateNumber;
}
public byte[] getAuthenticationData() {
byte[] data = FormatBytesUtil.concatAll(customerId, terminalId, timestamp, streamNumber, identityModel,
lengthOfTwo, lengthOfIdCheck, idCheckData, lengthOfAuthCodeData, authCodeData, lengthOfPicture, pictureData,
lengthOfReservasion, reservationData, certificateNumber);
return data;
}
}
package com.legalPersonMonitor.data;
/**
* Created by gaoxiang on 2017/12/29.
*/
public class AuthRequestBean {
/**
* customNumber :
* AppName :
* timeStamp :
* businessSerialNumber :
* authMode :
* photoData :
* authCode :
* idcardAuthData :
* authApplyRetainData :
*/
private String customerNumber;
private String appName;
private String timeStamp;
private String businessSerialNumber;
private String authMode;
private String photoData;
private String authCode;
private String idcardAuthData;
private AuthApplyRetainBean authApplyRetainData=new AuthApplyRetainBean();
public AuthApplyRetainBean getAuthApplyRetainData() {
return authApplyRetainData;
}
public void setAuthApplyRetainData(AuthApplyRetainBean authApplyRetainData) {
this.authApplyRetainData = authApplyRetainData;
}
public String getCustomerNumber() {
return customerNumber;
}
public void setCustomerNumber(String customerNumber) {
this.customerNumber = customerNumber;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
public String getBusinessSerialNumber() {
return businessSerialNumber;
}
public void setBusinessSerialNumber(String businessSerialNumber) {
this.businessSerialNumber = businessSerialNumber;
}
public String getAuthMode() {
return authMode;
}
public void setAuthMode(String authMode) {
this.authMode = authMode;
}
public String getPhotoData() {
return photoData;
}
public void setPhotoData(String photoData) {
this.photoData = photoData;
}
public String getAuthCode() {
return authCode;
}
public void setAuthCode(String authCode) {
this.authCode = authCode;
}
public String getIdcardAuthData() {
return idcardAuthData;
}
public void setIdcardAuthData(String idcardAuthData) {
this.idcardAuthData = idcardAuthData;
}
}
package com.legalPersonMonitor.data;
/**
* Created by gaoxiang on 2017/12/29.
*/
public class AuthResponseBean {
/**
* customerNumber : LegalPersonChapter001
* appName : fripolice001
* timeStamp : 20171224
* businessSerialNumber : 410DEFAAAAAAA
* authResult : 0000
* authResultRetainData :
* success : true
* errorDesc :
*/
private String customerNumber;
private String appName;
private String timeStamp;
private String businessSerialNumber;
private String authResult;
private String authResultRetainData;
private boolean success;
private String errorDesc;
public String getCustomerNumber() {
return customerNumber;
}
public void setCustomerNumber(String customerNumber) {
this.customerNumber = customerNumber;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
public String getBusinessSerialNumber() {
return businessSerialNumber;
}
public void setBusinessSerialNumber(String businessSerialNumber) {
this.businessSerialNumber = businessSerialNumber;
}
public String getAuthResult() {
return authResult;
}
public void setAuthResult(String authResult) {
this.authResult = authResult;
}
public String getAuthResultRetainData() {
return authResultRetainData;
}
public void setAuthResultRetainData(String authResultRetainData) {
this.authResultRetainData = authResultRetainData;
}
public boolean getSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getErrorDesc() {
return errorDesc;
}
public void setErrorDesc(String errorDesc) {
this.errorDesc = errorDesc;
}
}
package com.legalPersonMonitor.data;
/**
* Created by gaoxiang on 2018/1/3.
*/
public class PreAuthResponseBean {
/**
* customerNumber : 客户号
* appName : 应用名称
* timeStamp : 20171224
* businessSerialNumber : 业务流水号
* randomNumber : 随机数
* success : 是否成功
* errorDesc : 错误信息描述
*/
private String customerNumber = "";
private String appName = "";
private String timeStamp;
private String businessSerialNumber;
private String randomNumber;
private boolean success = false;
private String errorDesc = "";
public String getCustomerNumber() {
return customerNumber;
}
public void setCustomerNumber(String customerNumber) {
this.customerNumber = customerNumber;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
public String getBusinessSerialNumber() {
return businessSerialNumber;
}
public void setBusinessSerialNumber(String businessSerialNumber) {
this.businessSerialNumber = businessSerialNumber;
}
public String getRandomNumber() {
return randomNumber;
}
public void setRandomNumber(String randomNumber) {
this.randomNumber = randomNumber;
}
public boolean getSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getErrorDesc() {
return errorDesc;
}
public void setErrorDesc(String errorDesc) {
this.errorDesc = errorDesc;
}
}
package com.legalPersonMonitor.data;
import com.legalPersonMonitor.encryption.EncryptionI;
import com.legalPersonMonitor.encryption.impl.OldEncryptionImpl;
import com.legalPersonMonitor.utils.FormatBytesUtil;
import java.io.UnsupportedEncodingException;
public class RetainData {
// 姓名
private String name;
// 身份证号
private String idNumber;
// 有效期起
private String validFrom;
// 有效期止
private String validEnd;
/*
* 网站上传信息 JSON字符串 必填 String jsonStr =
* "{'vendorIp':'202.211.100.100','venderName':'rzfw','businessType':'test','dealDate':'20161202'}";
*/
private byte[] updataInfo_JSON = new byte[] { 123, 39, 118, 101, 110, 100, 111, 114, 73, 112, 39, 58, 39, 50, 48,
50, 46, 50, 49, 49, 46, 49, 48, 48, 46, 49, 48, 48, 39, 44, 39, 118, 101, 110, 100, 101, 114, 78, 97, 109,
101, 39, 58, 39, 121, 105, 110, 103, 120, 105, 110, 105, 110, 102, 111, 39, 44, 39, 98, 117, 115, 105, 110,
101, 115, 115, 84, 121, 112, 101, 39, 58, 39, 116, 101, 115, 116, 39, 44, 39, 100, 101, 97, 108, 68, 97,
116, 101, 39, 58, 39, 50, 48, 49, 54, 49, 50, 48, 50, 39, 125 };
String json="";
public RetainData(String name, String idNumber, String validFrom, String validEnd) {
super();
this.name = name;
this.idNumber = idNumber;
this.validFrom = validFrom;
this.validEnd = validEnd;
}
public byte[] getReservasionBytes() {
EncryptionI oldEncryptionImpl=new OldEncryptionImpl();
// 各项信息长度固定
byte[] nameByte = new byte[45];
byte[] idNumberByte = new byte[18];
byte[] validFromByte = new byte[8];
byte[] validEndByte = new byte[8];
try {
// 姓名以UTF-8格式转换为byte[]
nameByte = FormatBytesUtil.copyByteToAnother(nameByte, name.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
// 身份证号中含有字母"X"的,一律大写
idNumberByte = FormatBytesUtil.getBytesFromString(idNumberByte, idNumber);
if (validFrom != null) {
validFromByte = FormatBytesUtil.getBytesFromString(validFromByte, validFrom);
}
if (validEnd != null) {
validEndByte = FormatBytesUtil.getBytesFromString(validEndByte, validEnd);
}
byte[] bytes = FormatBytesUtil.concatAll(nameByte, idNumberByte, validFromByte, validEndByte, updataInfo_JSON);
byte[] reservasionBytes = oldEncryptionImpl.getEncryption(bytes);
return reservasionBytes;
}
}
package com.legalPersonMonitor.data;
import com.legalPersonMonitor.config.ParameterConfig;
import com.legalPersonMonitor.signature.SignatureI;
import com.legalPersonMonitor.signature.impl.OldSignatureImpl;
import com.legalPersonMonitor.utils.FormatBytesUtil;
public class SocketPackage {
private byte[] version;
private byte[] commandType;
private byte[] command;
private byte[] commandContent;
private byte[] operation;
// 数据区长度 4字节
private byte[] dataLength;
private byte[] data;
// 签名长度 1字节
private byte[] signatureLength;
// 签名 变长
private byte[] signature;
/**
*
* @param version 协议版本 2字节 0x0001
* @param commandType 命令类型 1字节 0x00(请求)0x01(应答)
* @param command 命令 1字节 0x00(身份认证申请)0x01(身份认证)
* @param commandContent 命令内容 1字节 保留 0x00
* @param operation 操作 1字节 保留 0x00
* @param data 数据区 变长
*/
public SocketPackage(byte[] version, byte[] commandType, byte[] command, byte[] commandContent, byte[] operation,
byte[] data) {
super();
this.version = version;
this.commandType = commandType;
this.command = command;
this.commandContent = commandContent;
this.operation = operation;
this.dataLength = FormatBytesUtil.getBytesOfInt(data.length);
this.data = data;
}
public byte[] getSocketPackage() {
SignatureI oldSignatureImpl=new OldSignatureImpl();
byte[] clearText = FormatBytesUtil.concatAll(version, commandType, command, commandContent, operation,
dataLength, data);
byte[] cipherText = oldSignatureImpl.signature(ParameterConfig.strDN, ParameterConfig.strDigestAlg,clearText);
this.signatureLength = new byte[] { (byte) cipherText.length };
this.signature = cipherText;
byte[] socketPackage = FormatBytesUtil.concatAll(clearText, signatureLength, signature);
return socketPackage;
}
}
package com.legalPersonMonitor.data;
/**
* 微信返回结果模型
*/
public class WxResponseBean {
private String errcode;
private String errmsg;
private String invaliduser;
public String getInvaliduser() {
return invaliduser;
}
public void setInvaliduser(String invaliduser) {
this.invaliduser = invaliduser;
}
public String getErrcode() {
return errcode;
}
public void setErrcode(String errcode) {
this.errcode = errcode;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
@Override
public String toString() {
return "WxResponseBean [errcode=" + errcode + ", errmsg=" + errmsg + "]";
}
}
package com.legalPersonMonitor.decryption;
public interface DecryptionI {
}
package com.legalPersonMonitor.decryption.impl;
public class NewDecryptionImpl {
}
package com.legalPersonMonitor.decryption.impl;
import com.legalPersonMonitor.decryption.DecryptionI;
public class OldDecryptionImpl implements DecryptionI {
}
package com.legalPersonMonitor.encryption;
public interface EncryptionI {
/**
* 加密
* @param bytes
* @return
*/
public byte[] getEncryption(byte[] bytes);
}
package com.legalPersonMonitor.encryption.impl;
public class NewEncryptionImpl {
}
package com.legalPersonMonitor.encryption.impl;
import cn.com.jit.assp.dsign.DSign;
import com.legalPersonMonitor.encryption.EncryptionI;
public class OldEncryptionImpl implements EncryptionI {
@Override
/**
* 加密
*/
public byte[] getEncryption(byte[] bytes){
DSign dSign = new DSign();
String signReturn = null;
DSign.init("./config/cssconfig.properties");
String[] alias = { "rzfw01" };
signReturn = dSign.encryptEnvelop(alias, bytes);
return signReturn.getBytes();
}
}
package com.legalPersonMonitor.monitor;
import com.legalPersonMonitor.connections.SendRequset;
import com.legalPersonMonitor.data.AccessTokenRequset;
import com.legalPersonMonitor.data.AccessTokenResponse;
import com.legalPersonMonitor.data.WxResponseBean;
/**
* Created by gaoxiang on 2018/1/22.
*/
public class SendToWeixin {
public void test(){
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!");
}
public void sendToWeixinMain(){
String msgServiceState= "0X4F模式下的服务状态监控"+ServiceStateMonitoring.serviceStateMonitoringServer()+" ";
String msgTrustedPlatformStatus= "0X4F模式下的可信平台状态监控"+new TrustedPlatformStatusMonitoring().trustedPlatformStatusMonitoringServer()+" ";
String msgSignatureServerStatus = "签名服务器状态监控"+new SignatureServerStatusMonitoring().signatureServerStatusMonitoringServer();
SendRequset sr=new SendRequset();
AccessTokenRequset atrequset=new AccessTokenRequset("https://qyapi.weixin.qq.com/cgi-bin/gettoken","wx4244612882ba3018","5dqLUQ9S3CjhFfKXsmgl4Q9PogJEG6qieoyr4AEw1UI" );
AccessTokenResponse asresponse=sr.getAccessToken(atrequset);
String sendjson="{ \"touser\": \"@all\", \"toparty\": \" \", \"totag\": \" \", \"msgtype\": \"mpnews\", \"agentid\": "+1000003+", "
+ "\"mpnews\": { \"articles\":[ "
+ "{ \"title\": \""+"身份认证监控系统"+"\", "
+ "\"thumb_media_id\": \""+"2_VLquGGm4PEhhG-vG5_9SEfdLvNrvNPbdLH6DrZqieHHH5LqXbfqvLWljvcgGvF4"+"\", "
+ "\"author\": \"\", "
+ "\"content_source_url\": \"\", "
+ "\"content\": \""+msgServiceState+msgTrustedPlatformStatus+msgSignatureServerStatus+"\", "
+ "\"digest\": \""+"\", "
+ "\"show_cover_pic\": \"1\" } ] }, "
+ "\"safe\":0}";
WxResponseBean wx=sr.sendTextMessage(asresponse, sendjson);
}
}
package com.legalPersonMonitor.monitor;
import com.legalPersonMonitor.config.ParameterConfig;
import com.legalPersonMonitor.connections.HttpClientPool;
import com.legalPersonMonitor.data.*;
import net.sf.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* Created by gaoxiang on 2018/1/22.
* 服务状态监控
*/
public class ServiceStateMonitoring {
private static String msgDescription="";
private static PreAuthResponseBean preAuthResponseBean;
public static String serviceStateMonitoringServer(){
try {
String preAuthRespStr = HttpClientPool.postRequest("http://121.22.111.251:9002/legalPerson/v2.0/auth_app", ParameterConfig.PREAUTH_JSONSTR);
JSONObject preAuthApply = JSONObject.fromObject(preAuthRespStr);
preAuthResponseBean = (PreAuthResponseBean) JSONObject.toBean(preAuthApply, PreAuthResponseBean.class);
if (!preAuthResponseBean.getSuccess()) {
msgDescription = preAuthResponseBean.getErrorDesc();
}
JSONObject jsonObject = JSONObject.fromObject(ParameterConfig.AUTH_JSONSTR);
Map config = new HashMap();
config.put("authApplyRetainData", AuthApplyRetainBean.class);
AuthRequestBean authRequestBean= (AuthRequestBean) JSONObject.toBean(jsonObject, AuthRequestBean.class, config);
authRequestBean.setBusinessSerialNumber(preAuthResponseBean.getBusinessSerialNumber());
String authResStr=JSONObject.fromObject(authRequestBean).toString();
String authRespStr = HttpClientPool.postRequest("http://121.22.111.251:9002/legalPerson/v2.0/authen_req",authResStr);
JSONObject authApply = JSONObject.fromObject(authRespStr);
AuthResponseBean authResponseBean= (AuthResponseBean) JSONObject.toBean(authApply, AuthResponseBean.class);
if(!authResponseBean.getSuccess()){
msgDescription=authResponseBean.getErrorDesc();
}
msgDescription=authResponseBean.getAuthResult();
}catch (Exception e){
msgDescription="服务状态监控超时错误";
}
return msgDescription;
}
}
package com.legalPersonMonitor.monitor;
import com.legalPersonMonitor.config.ParameterConfig;
import com.legalPersonMonitor.connections.SocketSender;
import com.legalPersonMonitor.utils.FormatBytesUtil;
import com.legalPersonMonitor.verification.VerificationI;
import com.legalPersonMonitor.verification.impl.OldVerificationImpl;
import java.util.Arrays;
import static com.legalPersonMonitor.config.ParameterConfig.VERIFICANTION_BYTE;
/**
* Created by gaoxiang on 2018/1/22.
* 签名服务器状态监控
*/
public class SignatureServerStatusMonitoring {
private static String msgDescription = "";
VerificationI oldVerificationImpl= new OldVerificationImpl();
public String signatureServerStatusMonitoringServer() {
try {
boolean aa = oldVerificationImpl.signCheck(VERIFICANTION_BYTE);
if (aa) {
msgDescription = "签名服务器正常运行";
} else {
msgDescription = "签名服务器出错";
}
}catch (Exception e){
msgDescription="连接超时";
}
return msgDescription;
}
}
\ No newline at end of file
package com.legalPersonMonitor.monitor;
import com.legalPersonMonitor.auth.Authentication;
import com.legalPersonMonitor.config.ParameterConfig;
import com.legalPersonMonitor.connections.SocketSender;
import com.legalPersonMonitor.data.AuthApplyRetainBean;
import com.legalPersonMonitor.data.AuthRequestBean;
import com.legalPersonMonitor.data.AuthResponseBean;
import com.legalPersonMonitor.utils.FormatBytesUtil;
import net.sf.json.JSONObject;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* Created by gaoxiang on 2018/1/22.
* 可信平台状态监控
*/
public class TrustedPlatformStatusMonitoring {
private String msgDescription = "";
public String trustedPlatformStatusMonitoringServer() {
try {
byte[] preAuthSendSocketData = SocketSender.sendSocketPackage(ParameterConfig.PREAUTH_BYTE);
if (preAuthSendSocketData != null) {
byte[] businessSerialNumberByte = Arrays.copyOfRange(preAuthSendSocketData, 24, 33);
String businessSerialNumber = FormatBytesUtil.bytesToHexString(businessSerialNumberByte);
JSONObject jsonObject = JSONObject.fromObject(ParameterConfig.AUTH_JSONSTR);
Map config = new HashMap();
config.put("authApplyRetainData", AuthApplyRetainBean.class);
AuthRequestBean authRequestBean = (AuthRequestBean) JSONObject.toBean(jsonObject, AuthRequestBean.class, config);
authRequestBean.setBusinessSerialNumber(businessSerialNumber);
byte[] responseBean = new Authentication().authExecute(authRequestBean);
byte[] authSendSocketData = SocketSender.sendSocketPackage(responseBean);
if (authSendSocketData != null) {
msgDescription = new String(Arrays.copyOfRange(authSendSocketData, 33, 37));
}
}
}catch (Exception e){
msgDescription="连接超时";
}
return msgDescription;
}
}
package com.legalPersonMonitor.server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
/**
* Created by gaoxiang on 2018/1/23.
*/
public class StartUpTask {
public static void main(String aa[]){
ApplicationContext context = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
}
}
package com.legalPersonMonitor.signature;
public interface SignatureI {
public byte[] signature(String dn, String strDigestAlg, byte[] data);
}
package com.legalPersonMonitor.signature.impl;
public class NewSignatureImpl {
}
package com.legalPersonMonitor.signature.impl;
import cn.com.jit.assp.css.client.util.Base64;
import cn.com.jit.assp.dsign.DSign;
import com.legalPersonMonitor.signature.SignatureI;
public class OldSignatureImpl implements SignatureI {
@Override
public byte[] signature(String dn,String strDigestAlg,byte[] data) {
DSign dSign = new DSign();
DSign.init("./config/cssconfig.properties");
String signResultString = dSign.p1Sign(dn,strDigestAlg, data);
byte[] signResultByte = Base64.decode(signResultString);
return signResultByte;
}
}
package com.legalPersonMonitor.utils;
public class FormatBytesUtil {
/**
* 将byte数组转换为short类型
* @param bytes
* @return short
*/
public static short getShortFromBytes(byte[] bytes) {
return (short) ((0xff & bytes[0]) | (0xff00 & (bytes[1] << 8)));
}
/**
* 将byte数组转换为int类型
* @param bytes
* @return
*/
public static int getIntFromBytes(byte[] bytes) {
return (0xff & bytes[0]) | (0xff00 & (bytes[1] << 8))
| (0xff0000 & (bytes[2] << 16))
| (0xff000000 & (bytes[3] << 24));
}
/**
* 将short类型的数据转为byte数组 short类型为两个字节将这个字节转为byte数组长度为二 eg:id和认证码长度的转换
*
* @param data
* @return
*/
public static byte[] getByteOfShort(short data) {
byte[] bytes = new byte[2]; // 创建一个byte数组,长度设置为2
bytes[0] = (byte) (data & 0xff);// 参数与0xff做与运算
bytes[1] = (byte) ((data & 0xff00) >> 8);// 做过‘与’运算之后右移8位
return bytes;
}
/**
* int类型转换为4字节长度的byte数组 eg:时间戳的生成 数据区长度的转换
*
* @param data
* @return
*/
public static byte[] getBytesOfInt(int data) {
byte[] bytes = new byte[4];
bytes[0] = (byte) (data & 0xff);
bytes[1] = (byte) ((data & 0xff00) >> 8);
bytes[2] = (byte) ((data & 0xff0000) >> 16);
bytes[3] = (byte) ((data & 0xff000000) >> 24);
return bytes;
}
/**
* 时间戳
*
* @return 4字节时间戳
*/
// public static byte[] getTimestamp() {
// int i = (int) (System.currentTimeMillis() / 1000);
// byte[] time = getBytesOfInt(i);
// return time;
// }
public static String getTimestamp() {
long i = (System.currentTimeMillis());
String time = String.valueOf(i);
return time;
}
/**
* 把from中的内容拷贝到to中 eg:姓名拷贝到保留数据明文
*
* @param to
* @param from
* @return
*/
public static byte[] copyByteToAnother(byte[] to, byte[] from) {
for (int i = 0; i < from.length; i++) {
to[i] = from[i];
}
return to;
}
/**
* String类型转为byte数组,单字节转换方式
*
* @param bytes
* @param string
* @return
*/
public static byte[] getBytesFromString(byte[] bytes, String string) {
int j=string.length();
if(bytes.length<string.length()){
j=bytes.length;
}
for (int i = 0; i < j; i++) {
bytes[i] = (byte) string.charAt(i);
}
return bytes;
}
/**
* 将两个byte数组合并为一个
*
* @param byte1
* @param byte2
* @return byte_3
*/
public static byte[] byteMerger(byte[] byte1, byte[] byte2) {
byte[] byte3 = new byte[byte1.length + byte2.length];
System.arraycopy(byte1, 0, byte3, 0, byte1.length);
System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length);
return byte3;
}
/**
* 用可变参数将所有的byte数组合并为一个
*
* @param first
* @param rest
* @return
*/
public static byte[] concatAll(byte[] first, byte[]... rest) {
int totalLength = first.length;
for (int i = 0; i < rest.length; i++) {
if (rest[i] != null) {
totalLength += rest[i].length;
}
}
byte[] result = new byte[totalLength];
System.arraycopy(first, 0, result, 0, first.length);
int offset = first.length;
for (int i = 0; i < rest.length; i++) {
if (rest[i] != null) {
System.arraycopy(rest[i], 0, result, offset, rest[i].length);
offset += rest[i].length;
}
}
return result;
}
/**
* 将byte数组转换成十六进制字符串 eg:流水号转换
*
* @author xia79
* @param ba
* @return
*/
public static String bytesToHexString(byte[] ba) {
String s = "";
for (int i = 0; i < ba.length; i++) {
s += String.format("%02X", ba[i]);
}
return s;
}
/**
* 将十六进制字符串转换成byte数组 eg:流水号转换
*
* @param hexString
* @return
*/
public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}
}
package com.legalPersonMonitor.verification;
public interface VerificationI {
public boolean signCheck(byte[] dataPackage);
}
package com.legalPersonMonitor.verification.impl;
public class NewVerificationImpl {
}
package com.legalPersonMonitor.verification.impl;
import cn.com.jit.assp.css.client.util.Base64;
import cn.com.jit.assp.dsign.DSign;
import com.legalPersonMonitor.verification.VerificationI;
import java.util.Arrays;
public class OldVerificationImpl implements VerificationI {
@Override
public boolean signCheck(byte[] dataPackage) {
byte[] dataLengthByte = Arrays.copyOfRange(dataPackage, 6, 10);
// 数据区长度
int dataLength =getIntFromBytes(dataLengthByte);
// 被签名数据
byte[] data = Arrays.copyOfRange(dataPackage, 0, 10 + dataLength);
// 签名长度数据
byte[] signatureLengthByte = Arrays.copyOfRange(dataPackage, 10 + dataLength, 11 + dataLength);
// 签名长度
int signatureLength = signatureLengthByte[0];
// 签名数据
byte[] signatureByte = Arrays.copyOfRange(dataPackage, 11 + dataLength, 11 + dataLength + signatureLength);
// 证书
byte[] zhengshu = Arrays.copyOfRange(data, data.length - 32, data.length);
DSign ds = new DSign();
DSign.init("./config/cssconfig.properties");
String certID = new String(zhengshu).trim();
String strDigetsAlg = "sm3";
long a = ds.p1Verify(certID, strDigetsAlg, Base64.encode(signatureByte), data);
if (a == 0) {
return true;
}
return false;
}
public static int getIntFromBytes(byte[] bytes) {
return (0xff & bytes[0]) | (0xff00 & (bytes[1] << 8))
| (0xff0000 & (bytes[2] << 16))
| (0xff000000 & (bytes[3] << 24));
}
}
package com.test;
import com.legalPersonMonitor.auth.Authentication;
import com.legalPersonMonitor.config.ParameterConfig;
import com.legalPersonMonitor.connections.HttpClientPool;
import com.legalPersonMonitor.connections.SocketSender;
import com.legalPersonMonitor.data.AuthApplyRetainBean;
import com.legalPersonMonitor.data.AuthRequestBean;
import com.legalPersonMonitor.data.AuthResponseBean;
import com.legalPersonMonitor.utils.FormatBytesUtil;
import net.sf.json.JSONObject;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* Created by gaoxiang on 2018/1/22.
*/
public class test {
public static void main(String args[]){
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<bean id="checkXMLInput" class="com.legalPersonMonitor.monitor.SendToWeixin" />
<task:scheduled-tasks>
<task:scheduled ref="checkXMLInput" method="sendToWeixinMain" initial-delay="2000" fixed-delay="5000"/>
<!--<task:scheduled ref="checkXMLInput" method="sendToWeixinMain" cron="0 30 13 ? * *"/>-->
<!--<task:scheduled ref="checkXMLInput" method="sendToWeixinMain" cron="0 35 13 ? * *"/>-->
</task:scheduled-tasks>
</beans>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment