zoukankan      html  css  js  c++  java
  • 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提供用户认证的能力。

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

  • 相关阅读:
    王道考研复习-操作系统-进程管理(二)
    王道考研复习-操作系统-计算机系统概述(一)
    Understanding Undefined Behavior
    iOS开发需要掌握的命令
    LLDB命令速查
    Flutter简介
    poj 2115 C Looooops 扩展欧几里得算法
    poj 2635 The Embarrassed Cryptographer ??/Java??(???)
    poj 3292 Semi-prime H-numbers 筛素数(简单题)
    poj 1019 Number Sequence 数学
  • 原文地址:https://www.cnblogs.com/jinjiyese153/p/8617437.html
Copyright © 2011-2022 走看看