1:最近在做电子发票的对接,里面有一个加密和解密的方法涉及到相关证书,后缀是cer和pfx的,在普通的java工程中测试通过,放到maven项目中始终报解密失败,最终查找后发现是maven编译的问题
2:异常信息
java.io.IOException: DER length more than 4 bytes: 111
查了一圈,没有得到好的解答,开始从原理入手,关于证书起始就是一个文件,不应该参与编译的,为什么会被编译,开始想到maven的编译,去查看java项目编译后和maven编译后的目录文件发现,maven编译后使得cer证书变大,导致解密失败
没有编译前
1:从原理入手,cer和pfx作为证书只是一个文件而已,不应该被编译,是在运行的时候再读取,所以应该把文件不放在这个项目里,比如一个配置平台,如果证书替换也方便,个人认为是最好的方案 2:阻止maven编译
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>
建议使用第一种
2019独角兽企业重金招聘Python工程师标准>>> ...
当使用maven-assembly-plugin或者maven-shade-plugin打包时,如果涉及到证书文件,一定设置过滤,否则证书文件会被做修改。报异常:
java.io.IOException: DER length more than 4 bytes: 111
maven-assembly-plugin:
<fileSet>
<di...
客户端私钥进行对数据签名时发生的错误:
Caused by: java.lang.IllegalArgumentException: unknown object in getInstance: com.android.org.bouncycastle.asn1.DEROctetString
有些机器可能会是这样的错误:
Caused by: java.lang.IllegalArgumen
一:证书问题.
在对应位置配置下面代码.
-Dmaven.multiModuleProjectDirectory=$MAVEN_HOME -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
右侧maven工具区找到对应的项目.先后点击clean.和install.
本文代码已提交至Github(版本号:31cef39a6e92b1d5857ed7432693df23bb681fe5),有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop
在上一篇博客《淘东电商项目(58) -聚合支付(基于设计模式自动跳转支付接口)》,已经讲解完了如下图的第1 - 5个步骤,接下来本文要讲解集成银联支付,也就是下面的第6-8个步骤。
本文目录结构:
l____引言
l____ 1. 集成银联支付
l_______
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
</plugins>
</build>
2. 运行Maven编译命令
在项目根目录下执行以下命令:
mvn compile
Maven将会在项目中查找Java源文件并编译它们。
3. 查看编译结果
编译结束后,在"target/classes"目录下可以看到生成的.class文件。如果编译成功,也可以执行以下命令进行测试:
mvn test
以上步骤是基本的Maven编译过程,如果涉及到其他依赖,需要在POM中声明。