相关文章推荐
乐观的洋葱  ·  linux-4.9.37 overlay ...·  5 月前    · 
乐观的签字笔  ·  Flutter ...·  6 月前    · 
踏实的登山鞋  ·  django test if model ...·  1 年前    · 

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工程师标准&gt;&gt;&gt; ...
当使用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中声明。