SpringCloud系列五:为Eureka Server添加用户认证及元数据

1. 回顾

上一篇博客讲解了Eureka集群及将微服务注册到集群上。在前面的讲解中,Eureka Server都是允许匿名访问的,本次将讲解如何构建一个需要登录才能访问的Eureka Server。

2. 为Eureka Server添加用户认证

复制项目 microservice-discovery-eureka,将ArtifactId修改为 microservice-discovery-eureka-authenticating。

在pom.xml中添加spring-boot-starter-seurity的依赖,该依赖为Eureka Server提供用户认证的能力。

1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-security</artifactId> 4</dependency>

在application.yml中添加认证配置。如何不进行配置,则默认用户名是 user ,默认密码是一个随机值,会在项目启动时打印出来。

1spring: 2 security: 3 user: 4 name: root # 用户名 5 password: 123456 # 密码

启动项目,访问 http://localhost:8761/ 即可看见身份验证的对话框,输出设置的用户名和密码即可进入。

将微服务中的 eureka.client.service-url.defaultZone 改为 http://root:123456@localhost:8761/eureka/ 即可注册到需认证的Eureka Server中。但是我测试一直没有成功,跟踪日志发现是因为csrf的问题,微服务的请求中不包含csrf参数,因此被CsrfFilter拦截。版本Edgware.SR2测试成功,但是该版本中的配置有所不同,该版本的配置为:

1security: 2 basic: 3 enabled: true 4 user: 5 name: root 6 password: 123456

--------------------------------------------------------------------------- 补充开始 --------------------------------------------------------------------------------------------------------

   > 上面已经说过,因为Eureka Server默认开启了CsrfFilter,导致微服务不能注册成功。因此只需要关闭Eureka Server的CsrfFilter即可

在Eureka Server中添加如下配置类即可关闭Csrf校验

1package com.itmuch.cloud.microservicediscoveryeurekaauthenticating; 2 3import org.springframework.security.config.annotation.web.builders.HttpSecurity; 4import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 5import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 6 7@EnableWebSecurity 8public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { 9 10 @Override 11 protected void configure(HttpSecurity http) throws Exception { 12 http.csrf().disable(); 13 super.configure(http); 14 } 15}

重新启动 microservice-discovery-eureka-authenticating

修改 microservice-provider-user 的 application.yml中 的 defaultZone为 http://user:password123@localhost:8761/eureka,然后启动

> 注册成功

--------------------------------------------------------------------------- 补充结束 --------------------------------------------------------------------------------------------------------

3. Eureka的元数据

Eureka的元数据有两种,分别为标准元数据和自定义元数据。

标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。

自定义元数据:自定义元数据可以使用eureka.instance.metadata-map配置,这些元数据可以在远程客户端中访问,但是一般不会改变客户端的行为,除非客户端知道该元数据的含义。

复制项目 microservice-provider-user,将ArtifactId修改为 microservice-provider-user-metadata

修改application.yml,使用eureka.instance.instance.metadata-map属性为该微服务添加自定义的元数据。

1eureka: 2 metadata-map: 3 my-metadata: 我自定义的元数据

复制项目 microservice-consumer-movie,将ArtifactId修改为 microservice-consumer-movie-metadata

修改 MovieController,添加方法showInfo(),展示微服务 microservice-provider-user-metadata 的元数据信息

1/** 2 * 查询microservice-provider-user服务的信息并返回 3 * 4 * @return 5 */ 6@GetMapping("/user-instance") 7public List<ServiceInstance> showInfo() { 8 return this.discoveryClient.getInstances("microservice-provider-user"); 9}

启动 microservice-discovery-eureka(必须第一个启动)

启动 microservice-provider-user-metadata

启动 microservice-consumer-movie-metadata

访问 http://localhost:8010/user-instance/,返回类似如下的内容。

将内容复制到 http://json.cn 中,看的更清晰明了。

4. 总结

这篇是很尴尬的一篇,搞了半天也没能将微服务注册到该版本的Eureka Server中,后续如果解决了会进行更新。

后续将讲解Eureka剩余的知识:自我保护模式、健康检查、多网卡环境下的IP选择等。敬请期待~~~

5. 参考

周立 --- 《Spring Cloud与Docker微服务架构与实战》

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang