Maven项目通过配置文件读取证书问题

在《Httpclient工具方法》这篇文中,通过@Value注入SSL证书文件的路径和密码,因为Spring的注入是在初始化bean的时候注入的,在类初始化的时候只有默认值,所以使用static静态块进行初始化则根本就读不到注入进来的值。

后来使用了@PostConstruct注解来进行初始化,该注解表示在bean实例化之后执行此方法。
为什么要将证书路径和密码通过配置文件注入进来呢?一是不想在代码中通过硬编码的方式将证书路径和密码写死。另外还考虑到将来如果证书过期,则重新上传证书然后在配置文件中配置好证书参数(配置文件独立加载),重启服务就可以生效。但是后来在生产环境中无法将证书文件上传到服务器上去,不得不将证书文件放到项目目录下,这样要替换证书文件就得重新发布项目代码(实际上是将麻烦留到了以后)。

先将证书文件(.jks或.keystore)放到src/resources目录下,通过

String keyPath= Thread.currentThread().getContextClassLoader().getResource("/").getPath()+keyStore;

(keyStore为注入进来的证书文件名)来获取证书文件的路径。

Thread.currentThread().getContextClassLoader().getResource(“/”)获取的是URI资源,格式为File:/xx/xx格式,通过getPath()方法获取资源位置(如果服务器运行在windows环境下需要去掉最前面的斜杠)。该路径指向classes目录下(如果getResource()中带了具体的类名参数,则会定位到该类的同级目录)。注意这里取到的路径中如果有空格,会自动将空格转成%20,需要处理一下(URL解码或者直接替换)。
到这里为止可能跟maven都没关系,那么在maven项目中还有什么问题呢?问题是这样的:Java的密钥库jks文件放在/src/main/resources目录下,在Maven中编译的时候就会自动增长变大,导致java读取keystore文件异常,抛出证书文件格式不正确异常。原因为maven会自动替换文件中的占位符。解决办法是在pom文件中禁止其修改资源文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>p12</nonFilteredFileExtension>
            <nonFilteredFileExtension>jks</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值