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.pluginsgroupId>
    <artifactId>maven-resources-pluginartifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>p12nonFilteredFileExtension>
            <nonFilteredFileExtension>jksnonFilteredFileExtension>
        nonFilteredFileExtensions>
    configuration>
plugin>

你可能感兴趣的:(后端框架)