阅读本文前可先参考

​​​​​​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依赖

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

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 添加依赖

org.springframework.boot

spring-boot-starter-security

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 依赖

org.springframework.boot

spring-boot-starter-security

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

CSRF(Cross-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网站),就不知道这个请求是伪造的,就被欺骗过去了。从而达到在用户不知情的情况下,给某个服务器发送了一个请求(比如转账)。

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: