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提供用户认证的能力。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

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

spring:
security:
user:
name: root # 用户名
password: 123456 # 密码

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

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

security:
basic:
enabled: true
user:
name: root
password: 123456

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

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

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

package com.itmuch.cloud.microservicediscoveryeurekaauthenticating;

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; @EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}

  > 重新启动 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属性为该微服务添加自定义的元数据。

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

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

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

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

  > 启动 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微服务架构与实战》

SpringCloud系列五:为Eureka Server添加用户认证及元数据的更多相关文章

  1. Eureka Server添加用户认证

    Eureka Server添加用户认证 学习了:http://blog.csdn.net/liuchuanhong1/article/details/54729556 注意:1,需要使用 defaul ...

  2. 注册中心Eureka页面添加用户认证

    我们需要登录即可访问到Eureka服务,这样其实是不安全的 为Eureka添加用户认证. 第一步,为itcast-microservice-eureka添加安全认证依赖: 第二步,增加applicat ...

  3. eureka-6-为Eureka Server 及Dashboard 添加用户认证

    Eureka Server 默认是允许匿名访问的你,当然也可以加认证权限 添加步骤: 1:在pom.xml文件中添加spring-boot-start-starter-security 的依赖.该依赖 ...

  4. SpringCloud系列六:Eureka的自我保护模式、IP选择、健康检查

    1. 回顾 前面讲了很多Eureka的用法,比如Eureka Server.Eureka Server的高可用.Eureka Server的用户认证(虽然未完全实现).元数据等, 这章将讲解剩下的自我 ...

  5. asp.net core系列 56 IS4使用OpenID Connect添加用户认证

    一.概述 在前二篇中讲到了客户端授权的二种方式: GrantTypes.ClientCredentials凭据授权和GrantTypes.ResourceOwnerPassword密码授权,都是OAu ...

  6. .NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证

    内容:本文带大家使用IdentityServer4进行使用OpenID Connect添加用户认证 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 在这一篇文章中我们希望使用Ope ...

  7. IdentityServer4【QuickStart】之利用OpenID Connect添加用户认证

    利用OpenID Connect添加用户认证 利用OpenID Connect添加用户认证 在这个示例中我们想要通过OpenID Connect协议将交互用户添加到我们的IdentityServer上 ...

  8. nginx 添加用户认证

    nginx 添加用户认证  nginx 配置文件添加: 配置代理添加用户认证:server {   listen       ;   server_name localhost;   location ...

  9. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

    1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...

随机推荐

  1. 让Asp.net Web预启动

    IIS8以下解决方案: 当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是Application Pool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP ...

  2. CAP理论下对比ACID模型与BASE模型

    CAP介绍 Consistency(一致性), 数据一致更新,所有数据变动都是同步的.比如网购,库存减少的同时资金增多.Availability(可用性), 好的响应性能.比如支付操作10ms内响应用 ...

  3. Java中使用HttpRequest调用RESTfull的DELETE方法接口提示:How to fix HTTP method DELETE doesn't support output

    说明:无论是Spring框架还是Spring Boot的Feign形式的客户端,以下的解决方法都适用. 解决方法:直接升级JDK 1.8,这个问题是1.7的BUG. 参考: https://sales ...

  4. Lazy Scheduler:我的轻量级任务调度框架

    一.背景 工作中经常涉及任务调度,一直都是采用while(true) => if hitted DO => Thread.Sleep(interval)的模式.但是最近实在是感觉这种实现模 ...

  5. 解析HTML文件 - 运用SgmlReader类来解析HTML文件

    运用.NET Framework类来解析HTML文件.读取数据并不是最容易的.虽然你可以用.NET Framework中的许多类(如StreamReader)来逐行解析文件,但XmlReader提供的 ...

  6. 【安居客】资深PHP软件开发工程师

    工作职责: 1.网站项目的开发和维护: 2.负责技术部软件开发架构设计: 3.负责生产环境.测试环境和生产环境服务器运维和优化: 4.负责研究较前沿和复杂的技术运用: 岗位要求: 1.熟悉 PHP 程 ...

  7. oracle 博客精选

    http://mp.sohu.com/profile?xpt=b3JhbmV3c0Bzb2h1LmNvbQ==

  8. springMVC初探视图解析器——XmlViewResolver

    XmlViewResolver解析器 XmlViewResolver基于XML文件中的视图bean来解析“逻辑视图”.XmlViewResolver默认会从/WEB-INF/views.xml中加载视 ...

  9. ES6中的Map集合(与java里类似)

    Set类型可以用来处理列表中的值,但是不适用于处理键值对这样的信息结构.ES6也添加了Map集合来解决类似的问题 一.Map集合 JS的对象(Object),本质上是键值对的集合(Hash结构),但是 ...

  10. 解决The prefix 'context' for element 'context:component-scan' is not bound

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...