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