Maven项目通过配置文件读取证书问题
2017-06-26 16:33
1336 查看
在《Httpclient工具方法》这篇文中,通过@Value注入SSL证书文件的路径和密码,因为Spring的注入是在初始化bean的时候注入的,在类初始化的时候只有默认值,所以使用static静态块进行初始化则根本就读不到注入进来的值。
后来使用了@PostConstruct注解来进行初始化,该注解表示在bean实例化之后执行此方法。
为什么要将证书路径和密码通过配置文件注入进来呢?一是不想在代码中通过硬编码的方式将证书路径和密码写死。另外还考虑到将来如果证书过期,则重新上传证书然后在配置文件中配置好证书参数(配置文件独立加载),重启服务就可以生效。但是后来在生产环境中无法将证书文件上传到服务器上去,不得不将证书文件放到项目目录下,这样要替换证书文件就得重新发布项目代码(实际上是将麻烦留到了以后)。
先将证书文件(.jks或.keystore)放到src/resources目录下,通过
(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文件中禁止其修改资源文件:
后来使用了@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>
相关文章推荐
- 基于maven管理的项目中spring+mybatis配置数据源读取不到properties属性文件的问题
- maven项目中resource包中的配置文件load失败问题
- Spring boot框架项目,使用maven命令将配置文件打包到jar包外,项目运行读取jar外配置文件
- Maven项目中读取src/main/resources目录下的配置文件的方法
- maven 项目中读取不同的配置文件
- Eclipse中通过FileSystemXmlApplicationContext读取不到配置文件问题
- Maven项目中读取src/main/resources目录下的配置文件
- Maven项目中读取src/main/resources目录下的配置文件
- maven编译项目后配置文件查找不到的问题
- Maven项目读取resources下文件的路径问题(getClassLoader的作用)
- IntelliJ IDEA中的Maven项目下的配置文件发布问题
- scala的maven项目读取配置文件
- Maven项目中读取src/main/resources目录下的配置文件
- JavaWeb项目读取和修改配置文件问题
- 转:Maven项目编译后classes文件中没有dao的xml文件以及没有resources中的配置文件的问题解决
- Maven 项目 Java读取配置文件
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- maven项目 子模块的myabtis配置文件读取失败
- myeclipse部署maven项目到tomcat,src/main/resources里面配置文件部署不到webapp下classes的问题
- myeclipse部署maven项目到tomcat,src/main/resources里面配置文件部署不到webapp下classes的问题