1:最近在作电子发票的对接,里面有一个加密和解密的方法涉及到相关证书,后缀是cer和pfx的,在普通的java工程中测试经过,放到maven项目中始终报解密失败,最终查找后发现是maven编译的问题
2:异常信息
java.io.IOException: DER length more than 4 bytes: 111html
查了一圈,没有获得好的解答,开始从原理入手,关于证书起始就是一个文件,不该该参与编译的,为何会被编译,开始想到maven的编译,去查看java项目编译后和maven编译后的目录文件发现,maven编译后使得cer证书变大,致使解密失败
没有编译前
编译后
1:从原理入手,cer和pfx做为证书只是一个文件而已,不该该被编译,是在运行的时候再读取,因此应该把文件不放在这个项目里,好比一个配置平台,若是证书替换也方便,我的认为是最好的方案 2:阻止maven编译java
build中阻止,相关配置以下:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>/CA/tungkongca.cer</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>/CA/tungkongca.cer</exclude> </excludes> </resource> </resources> </build>
maven-plugin中阻止,相关配置以下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> <!-- 过滤后缀为pem、pfx的证书文件 --> <nonFilteredFileExtensions> <nonFilteredFileExtension>pem</nonFilteredFileExtension> <nonFilteredFileExtension>pfx</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration>
</plugin>apache