本地demo测试文件加密证书正常,测试环境校验密码时出现异常:
java.io.IOException: DerInputStream.getLength(): lengthTag=127, too big.
或
java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
原因:程序的编译时,filtering会导致证书文件被修改,编译后的文件和原文件不一致。
解决方案:模块下pom文件<build></build>内添加<resources></resources>标签:
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>目录A/证书文件名.P12</exclude>
</excludes>
</resource>
<!-- 在classes目录下生成证书原文件-->
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>目录A/证书文件名.P12</include>
</includes>
</resource>
</resources>
网上有下面的解决方案,尝试之后未解决问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<!-- 过滤证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>P12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>