接上篇《36.配置属性加解密之非对称加密》 Spring Cloud版本为Finchley.SR2版
上两篇我们讲解了有关Spring Cloud Config的对称加密与非对称加解密的相关操作,本篇来讲解Spring Cloud Config的安全认证机制。
本部分官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_security
注:好像Finchley.SR2的文档已经挂了,最新的是Finchley.SR4的文档。
Spring Cloud Config的安全认证与Eureka的安全认证类似,还记得之前Eureka是怎么添加安全认证的吗?我们回顾一下:
1、首先在eureka server工程pom文件中引入eureka的安全认证依赖:
org.springframework.boot
spring-boot-starter-security
2、在eureka server工程的yml配置文件中添加security相关的配置:
spring:
security:
user:
name: user
password: password123
注:因Finchey版本默认开启csrf,需要关闭csrf,开启httpBasic。
3、然后修改注册到eureka的客户端工程的yml配置的defaultZone的链接即可,格式:
eureka.client.serviceUrl.defaultZone=http://${userName}:${password}@localhost:8761/eureka
注:详细请参见之前的文章:《【Spring Cloud总结】6.将微服务注册到Eureka Server上》。
通过回顾其配置方式,我们可以知道,添加安全认证是需要Eureka服务端添加spring-security相关的依赖,并且在配置文件中指定相关的认证账号和密码,而客户端需要重新配置注册服务地址defaultZone,将认证账号密码带上。
反观我们前面学习的Spring Cloud Config,与Eureka的服务端-客户端机制类似,也是由Config Server服务端提供配置信息访问服务,Config Client通过服务端获取配置。而实际上Spring Cloud Config添加认证的具体配置也和Eureka是基本相同的(只有客户端略微不同),服务端也是添加spring-boot-starter-security的依赖,然后在配置文件中指定spring.security.user.name和spring.security.user.password即可。
而客户端要访问服务端时,与Eureka类似,在配置文件中添加认证的账号密码,有两种方式:
1、修改spring.cloud.config.uri
将原来的“http://localhost:8090”改为“http://${userName}:${password}@localhost:8090”,如:
spring:
cloud:
config:
uri: http://user:password123@localhost:8090
2.使用spring.cloud.config.username和spring.cloud.config.password属性:
spring:
cloud:
config:
uri: http://localhost:8090
username: user
password: password123
注:以上两个同时配置的话,第二种的优先级要高于第一种。
1、config server服务端
修改之前的microserver-config-server工程,为其添加spring-boot-starter-security依赖:
4.0.0
microserver-config-server
microserver-config-server
com.microserver.cloud
microserver-spring-cloud
0.0.1-SNAPSHOT
org.springframework.cloud
spring-cloud-config-server
org.springframework.boot
spring-boot-starter-security
然后在application.yml,指定spring.security.user.name和spring.security.user.password:
server:
port: 8090
spring:
security:
user:
name: user
password: password123
cloud:
config:
server:
git:
uri: https://gitee.com/jackzhucoder/Spring-Cloud-Config-Test
此时我们重启microserver-config-server工程,发现会弹出认证的窗口:
输入上面配置的账号密码后,就可以进入服务端。
2、config client访问添加认证的服务端
在microserver-config-client工程中,我们修改bootstrap.yml配置文件(在这里配置了Config Server的访问信息),为其添加认证,我们选择添加spring.cloud.config.username和spring.cloud.config.password属性:
spring:
cloud:
config:
uri: http://localhost:8090
username: user
password: password123
profile: dev
label: master #如果ConfigServer的后端存储是Git,默认就为master
然后重启microserver-config-client工程,访问之前我们写的/profileType服务:
package com.microserver.cloud;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigClientController {
@Value("${type}")
private String profileType;
@GetMapping("/profileType")
private String getProfileType() {
return this.profileType;
}
}
注:这里的${type},就是之前我们放在仓库里的默认dev配置文件的参数(通过bootstrap.yml配置文件中的profile: dev属性得知需获取dev类型的配置文件)。
访问结果:
发现访问成功,客户端与服务端之间在后台进行了一个认证的操作。
如果客户端的账号密码不正确,则在启动工程的时候,会出现取不到type值的异常(java.lang.IllegalArgumentException: Could not resolve placeholder 'type' in value "${type}"):
如果在客户端配置文件中配置了本地默认的type值,则会显示它(因为获取不到远程的参数,如果获取到了,远程的参数会覆盖本地配置)。
以上就是Spring Cloud Config的安全认证配置和使用。
参考:《51CTO学院Spring Cloud高级视频》
转载请注明出处:https://blog.csdn.net/acmman/article/details/105616618