应用场景:对接微信支付的退款功能
apiclient_cert.p12文件,所在路径如下:
apiclient_cert.p12文件,引用如下:
KeyStore keyStore = KeyStore.getInstance("PKCS12");
try (InputStream is = this.getClass().getClassLoader().getResourceAsStream("apiclient_cert.p12")) {
keyStore.load(is, wxPayConfig.getMchId().toCharArray());
}
return SSLContexts.custom()
.loadKeyMaterial(keyStore, wxPayConfig.getMchId().toCharArray())
.build();
程序运行时报错:java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
原因:maven打包时,会对文件进行转码,重新编码后会导致证书文件不可用
解决:pom依赖中进行配置,让maven打包时过滤掉不需要转码的文件
pom.xml文件添加过滤plugins:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
<!-- <nonFilteredFileExtension>pem</nonFilteredFileExtension> -->
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
方案二:pom.xml文件添加过滤:resource——>filtering
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.p12</include>
<!-- <include>**/*.pem</include> -->
</includes>
</resource>
</resources>
</build>