springcloud-springcloud之config分布式配置;config注册至eureka;集成security安全认证(十七)(代码片段)

MinggeQingchun MinggeQingchun     2022-10-21     372

关键词:

阅读本文前可先参考

​​​​​​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 折起

springcloud-springcloud之config分布式配置;config注册至eureka;集成security安全认证(十七)(代码片段)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客https://blog.csdn.net/MinggeQingchun/article/details/125337347https://blog.csdn.net/MinggeQingchun/arti 查看详情

springcloud-springcloud之config分布式配置;加解密;配置信息局部刷新;springcloudbus+rabbitmq全局刷新(十六)(代码片段)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客https://blog.csdn.net/MinggeQingchun/article/details/125337347一、加解密在Git仓库中明文存储配置信息值,对于某些敏感... 查看详情

springcloud-springcloud之sleuth分布式链路跟踪;zipkin埋点数据;elasticsearch数据持久化(十八)(代码片段)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客一、SpringCloudSleuth微服务有几种监控方式,如SpringBootActuator监控微服务,SpringBootAdmin监控微服务,Hy... 查看详情

springcloud-springcloud之security服务安全机制(二十)(代码片段)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客SpringSecurity微服务的Rest服务都是基于http请求的,因此很有可能暴露在公网上,任何人都可能调用访问&#... 查看详情

springcloud-springcloud之gateway网关(十三)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客一、API网关引自百度百科API网关,软件术语,两个相互独立的局域网之间通过路由器进行通信,中... 查看详情

springcloud-springcloud之zuul和gateway网关(十四)(代码片段)

SpringCloudGateway是SpringCloud的一个子项目。而zuul则是Netflix公司的项目,只是Spring将zuul集成在SpringCloud中使用而已。因为zuul2.0连续跳票和zuul1的性能表现不是很理想,所以催生了spring团队开发了Gateway项目ZuulZuul是netflix公司的... 查看详情

springcloud-springcloud之config分布式配置;server,client配置(十五)(代码片段)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客在分布式微服务系统中,几乎所有服务的运行都离不开配置文件的支持,这些配置文件通常由各个服务... 查看详情

springcloud-springcloud之apolloconfig携程阿波罗配置中心(二十一)(代码片段)

由于SpringCloud自带的Config需要配合Bus使用,且不能实时刷新,因此市面上出现了很多开元的配置中心市面上开源的配置中心Apollo(阿波罗):携程框架部门研发的分布式配置中心,能够集中化管理应用不同... 查看详情

springcloud-springcloud根/父项目,开发准备(代码片段)

一、SpringCloud开发项目工程说明在后续的SpringCloud工程项目开发,以及博文中,都要注意此文说明!1、SpringCloud本身并不是一个拿来即可用的框架,它是一套微服务规范,共有两代实现。(1)SpringCloudNet... 查看详情

springcloud-springcloudalibaba之gateway集成sentinel(代码片段)

阅读本文前可先参考SpringCloud-SpringCloud之Gateway网关(十三)_MinggeQingchun的博客-CSDN博客_spring.cloud.gateway.routes[0]SpringCloud-SpringCloudAlibaba之Sentinel规则持久化(十)_MinggeQingchun的博客-CSDN 查看详情

springcloud-springcloudnetflix之ribbon(代码片段)

阅读本文前可先参考 SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客SpringCloudRibbon是一套基于NetflixRibbon实现的客户端负载均衡和服务调用工具Ribbon是Netflix公司发布的开源组件,其主要功... 查看详情

springcloud-springcloudnetflix之hystrixdashboard仪表盘监控(代码片段)

阅读本文前可先参考SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客https://blog.csdn.net/MinggeQingchun/article/details/125308948https://blog.csdn.net/MinggeQingchun/article/de 查看详情

springcloud-springcloudnetflix之eureka,ribbon(代码片段)

阅读本文前可先参考 SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客我们首先来看下不需要注册服务中心,服务消费者直接调用服务提供者一、服务消费者直接访问服务提供者1、服务提... 查看详情

springcloud-springcloudnetflix之zuul网关;路由(代码片段)

阅读本文前可先参考SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客一、API网关引自百度百科API网关,软件术语,两个相互独立的局域网之间通过路由器进行通信,中间的路由被称... 查看详情

springcloud-springcloud简介(代码片段)

1,springcloud简介​springcloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。实现的功能有服务注册与发现,服务调用,服务熔断,负载均衡,服务降... 查看详情

c++11之基于范围的for循环(代码片段)

系列文章C++11之正则表达式(regex_match、regex_search、regex_replace)C++11之线程库(Thread、Mutex、atomic、lock_guard、同步)C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、auto_ptr)浅谈内存管理C+... 查看详情

c++11之追踪返回类型(代码片段)

系列文章C++11之正则表达式(regex_match、regex_search、regex_replace)C++11之线程库(Thread、Mutex、atomic、lock_guard、同步)C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、 查看详情

c++11之委派构造函数(代码片段)

系列文章C++11之正则表达式(regex_match、regex_search、regex_replace)C++11之线程库(Thread、Mutex、atomic、lock_guard、同步)C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、 查看详情