SpringCloud - Spring Cloud 之 Config分布式配置;Config注册至Eureka;集成 Security安全认证(十七)

阅读本文前可先参考

​​​​​​SpringCloud - Spring Cloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客

https://blog.csdn.net/MinggeQingchun/article/details/125337347

https://blog.csdn.net/MinggeQingchun/article/details/125371578

一、Spring Cloud Config注册至Eureka

在真实的项目环境中,Spring Cloud Config配置中心难免会出现各种问题,我们需要将 Spring Cloud Config 设置为高可用,Spring Cloud Config的高可用机制解决方式非常简单,把Spring Cloud Config注册到 Eureka 即可,此时用户访问的时候不是直接从配置中心获取配置信息,而是先通过eureka中获取配置中心的地址,然后再从配置中心获取具体服务的配置信息

1、Spring Cloud Config Server多配置中心

1、将  springcloud-8-service-config 下的 application.properties 复制3份

application-config8887.properties

application-config8888.properties

application-config8889.properties

2、向 Eureka 注册中心注册服务

server.port=8888

spring.application.name=springcloud-8-service-config

#uri 表示配置中心所在仓库的位置(GitHub站点访问较慢由于网络比较慢,可能连接失败;此处我们使用国内码云gitee()
spring.cloud.config.server.git.uri=https://gitee.com/xx/springcloud-config.git
#search-paths 表示仓库下的子目录
spring.cloud.config.server.git.search-paths=config-center/provider,config-center/consumer
#GitHub 用户名,密码(如果Git仓库为公开仓库,可以不填写用户名和密码)
spring.cloud.config.server.git.username=xx
spring.cloud.config.server.git.password=xx
# 忽略ssl或者自动填充公钥
spring.cloud.config.server.git.skip-ssl-validation=true


#配置rabbitmq
spring.rabbitmq.host=192.168.133.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=root
spring.rabbitmq.password=root

#开启spring cloud bus,默认是开启的,也可以省略该配置
spring.cloud.bus.enabled=true

#打开所有的web访问端点
management.endpoints.web.exposure.include=*


#每间隔10s,向服务端发送一次心跳,证明自己依然"存活"
eureka.instance.lease-renewal-interval-in-seconds=10
#告诉服务端,如果我60s之内没有给你发心跳,就代表我故障了,将我踢出掉
eureka.instance.lease-expiration-duration-in-seconds=60
#告诉服务端,服务实例以IP作为链接,而不是取机器名
eureka.instance.prefer-ip-address=true
eureka.client.eureka-server-connect-timeout-seconds=30
eureka.client.eureka-server-read-timeout-seconds=60
#告诉服务端,服务实例的id,id要是唯一的(分别 springcloud-8-service-config-8887,springcloud-8-service-config-8888,springcloud-8-service-config-8889)
eureka.instance.instance-id=springcloud-8-service-config

#eureka注册中心的连接地址
eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka,http://eureka8762:8762/eureka,http://eureka8763:8763/eureka

3、添加eureka-client依赖

<!--spring-cloud-starter-netflix-eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

4、在客户端 springcloud-8-service-config-consumer 增加对eureka注册中心的配置 ,bootstrap.properties文件:

#使用spring-cloud-config配置中心
#name 对应配置文件中的 application
#profile 对应 profile
#label 对应 label
#uri 表示配置中心的地址
spring.application.name=application
spring.cloud.config.profile=dev8081
spring.cloud.config.label=master
#http://localhost:8888/
spring.cloud.config.uri=http://192.168.133.128:8888/



#配置中心的url可以通过注册中心发现
spring.cloud.config.discovery.enabled=true
# 在eureka中注册的服务名
spring.cloud.config.discovery.service-id=springcloud-8-service-config

当某些配置中心宕机后,客户端的微服务会基于注册中心去尝试下一个配置中心的url 

2、Nginx

spring.cloud.config.uri=http://nginx的ip:nginx端口/

这个url写成访问nginx,然后通过nginx负载均衡转发到3个config服务

二、Spring Cloud Config 集成 Security 安全认证

为了保护配置中心的敏感数据,需要对Config Server进行安全保护,当前基于Spring Security方案,为Config Server增加最简单的Basic安全认证

1、Config Server 服务端 springcloud-8-service-config 添加依赖

<!-- spring-boot-starter-security
            config 配置中心安全认证
         -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2、在application.properties文件中配置账号和密码:

#安全认证;配置访问config配置中心的访问账号和密码
spring.security.user.name=admin
spring.security.user.password=123456

3、启动Config Server,测试验证,先只启动Config Server,通过浏览器的URL访问配置中心

http://localhost:8888/master/application-dev.properties

首先会跳到登录界面,要求输入用户名密码: 

4、如果认证成功后,访问到对应的配置

5、 Config Client配置用户名密码,客户端要访问配置中心;修改bootstrap.yml,配置上面的用户名密码

#安全认证;配置访问config配置中心的访问账号和密码
spring.cloud.config.username=admin
spring.cloud.config.password=123456

注:

config server 中和 config client 配置不同,服务端是 spring.security. 配置;客户端 是 spring.cloud.config. 配置

三、Spring Cloud Eureka 集成 Security 安全认证

一般情况下Eureka 都会在一个内网环境中,但某些项目中需要让其他外网的服务注册到Eureka,这个时候就有必要让Eureka增加一套安全认证机制了,让所有服务提供者通过安全认证后才能注册进来

1、在 eureka server 端 springcloud-3-service-eureka 添加 spring-boot-starter-security 依赖

<!-- spring-boot-starter-security
            config 配置中心安全认证
         -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2、eureka server 端  配置文件 application.properties 设置访问账户,密码

#安全认证;配置访问config配置中心的访问账号和密码
spring.security.user.name=admin
spring.security.user.password=123456

3、eureka server 端 编写配置类EurekaSecurityConfig,重写configure方法,把 csrf 劫持置为不可用,让服务能被接收和注册

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * csrf置为不可用
 */
@Configuration
@EnableWebSecurity
public class EurekaSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //csrf置为不可用
        http.csrf().disable();
        super.configure(http);
    }
}

4、客户端访问的时候注册中心url中添加用户名和密码

#指定服务注册中心的位置
eureka.client.service-url.defaultZone=http://admin:123456@localhost:8761/eureka

5、启动 eureka server 服务,浏览器输入 http://eureka8761:8761/

会先跳转到 登录页,输入账户密码即可访问 

输入账户,密码后就能访问eureka 控制台

四、CSRF

CSRFCross-site request forgery),也被称为:one click attack/session riding,中文名称:跨站请求伪造,缩写为:CSRF/XSRF。

CSRF(Cross-site request forgery)简称:跨站请求伪造,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。

CSRF攻击原理:

网站是通过cookie来实现登录功能的。而cookie只要存在浏览器中,那么浏览器在访问这个cookie的服务器的时候,就会自动的携带cookie信息到服务器上去。那么这时候就存在一个漏洞了,如果你访问了一个别有用心或病毒网站,这个网站可以在网页源代码中插入js代码,使用js代码给其他服务器发送请求(比如ICBC的转账请求)。那么因为在发送请求的时候,浏览器会自动的把cookie发送给对应的服务器,这时候相应的服务器(比如ICBC网站),就不知道这个请求是伪造的,就被欺骗过去了。从而达到在用户不知情的情况下,给某个服务器发送了一个请求(比如转账)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值