之前的工程存在两个问题:
1)可以随意通过url获取到config-server的内容,不安全。
2)配置文件保存在git中,配置中的敏感信息有泄漏风险;
本文的目的就是解决以上两个问题,使用的工程是上一篇的工程。
一.使用spring-security来限制通过url获取配置内容。
1.在config-server工程中增加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> |
---|
2.在config-server工程的配置文件中,增加:
security.user.name=xx security.user.password=123456 |
---|
3.此时通过url获取配置信息,会出现如下界面:
输入上一步设置的用户名和密码后才能获取到,否则页面会报404。在输入了正确的用户名密码后,浏览器会返回一个Authorization的头信息,之后的请求会带上这个头信息,表示已登录,清除缓存后需要再次登录。
至此,解决了第一个问题。
二.对配置文件的敏感信息加密
1.下载一个不限长度的JCE,百度即可。我的是jdk1.7,下载地址是http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html。
2.将下载后的文件解压,得到:
将两个jar包放入 JAVA_HOME/jre/lib/secerity下,覆盖同名文件。
3.在config-server工程的配置文件中,增加配置:
#加密密钥 encrypt.key=key1 |
---|
4.使用postman等工具,用post方式请求http://localhost:9999/encrypt接口,参数类型选择raw(如果名文中含有特殊字符,则还需要将text这里选择为 plain/text ),输入要加密的明文,得到的结果就是加密后的密文:
用post方式请求http://localhost:9999/decrypt接口,参数类型选择raw,输入密文,得到的结果就是解密后的明文:
使用的时候,将密文配置到git中,但是需要一个{cipher}前缀:
此时,在git中查看是密文,通过url和config-client中获取到的就是明文:
注意:如果配置了第一步的spring-security,那么在操作decrypt 和 encrypt接口的时候,需要携带Authorization头信息,值可以通过url方式登录后刷新页面查看请求头。
至此,解决了第二个问题。