对接支付渠道,通过绝对路径读取私钥正常,在maven项目的resource目录下,通过classpath路径的方式读取错误?
- 通过两种方法验证得出的输出结果都是true
priKeyStream = new FileInputStream("/Users/xxx/workspace_pay/pay-tunnel/pay-tunnel-service/src/main/resources/cert/baofoo/bfkey_100025773@@200001173.pfx"); byte[] reads1 = new byte[priKeyStream.available()]; priKeyStream.read(reads1); String a = new String(reads1); System.out.println("a=" + a + " len:" + reads1.length); priKeyStream = BaofooBizUtil.getSignCertByPath("cert/baofoo/bfkey_100025773@@200001173.pfx"); byte[] reads = new byte[priKeyStream.available()]; priKeyStream.read(reads); String b = new String(reads); System.out.println("b=" + a + " len:" + reads.length); System.out.println("a eq b : " + a.equals(b) + " len:"+ (reads.length() == .length())); -控制台没有答应错误,翻看代码原来在三方工具类中包异常信息都吞掉了,打印异常看到 java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big. 百度了找到了解决方案,maven对它支持的几种类型外在编译的时候会对其他文件改写里面的内容
在pom文件中<plugins></plugins>中加入以下配置就OK
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration><encoding>UTF-8</encoding> <!-- 过滤后缀为pem、pfx的证书文件 --> <nonFilteredFileExtensions> <nonFilteredFileExtension>cer</nonFilteredFileExtension> <nonFilteredFileExtension>pem</nonFilteredFileExtension> <nonFilteredFileExtension>pfx</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin>
感谢作者的分享,讲的很详细:
https://blog.csdn.net/wolf_love666/article/details/51448596
