2-1、服务的注册与发现以及安全认证

服务注册与发现

本例代码详见 cloudDemo01 。

一、创建“服务注册中心”

####### 1、创建一个基础的Spring Boot工程,并在pom.xml中引入需要的依赖内容:详细配置见示例。



    
        cloudDemo01
        com.learn
        1.0-SNAPSHOT
    

    4.0.0

    com.learn
    eureka-server
    0.0.1-SNAPSHOT
    jar

    eurekaserver

    
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka-server
        

        
            org.springframework.cloud
            spring-cloud-starter-hystrix
        

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud-dependencies.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${spring-boot.version}
            
        
    


2、通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。这一步非常的简单,只需要在一个普通的Spring Boot应用中添加这个注解就能开启此功能。
package com.eureka.server;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringCloudApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
3、修改 application.yml 文件,在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties中问增加如下配置:
server:
  port: 8091

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    registerWithEureka: false
    fetchRegistry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
  application:
    name: eureka-server
4、启动工程,访问 http://localhost:8091/


二、创建“服务提供方” (eureka client)

当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。

1、创建一个基本的springboot项目 task-server 。修改pom文件


    
        cloudDemo01
        com.learn
        1.0-SNAPSHOT
    
    4.0.0

    com.learn
    service-rest

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.cloud
            spring-cloud-starter-hystrix
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud-dependencies.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${spring-boot.version}
            
        
    

2、注解@EnableEurekaClient 表明自己是一个eurekaclient
package com.service.rest;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringCloudApplication
@EnableEurekaClient
public class RestApplication {
    public static void main(String[] args) {
        SpringApplication.run(RestApplication.class, args);
    }
}
3、配置文件中注明自己的服务注册中心的地址,application.yml配置文件如下:
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8091/eureka/

server:
  port: 8092

spring:
  application:
    name: rest-service
  • 需要指明spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name 。
  • eureka.client.serviceUrl.defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置。

4、添加一个controller类

package com.service.rest;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringCloudApplication
@EnableEurekaClient
public class RestApplication {
    public static void main(String[] args) {
        SpringApplication.run(RestApplication.class, args);
    }
}
5、再次访问 http://localhost:8091/、以及 http://localhost:8092/test/adas ,查看内容。
三、安全验证

注册中心的管理界面以及服务注册时,没有任何认证机制,安全性比较差,如果其它服务恶意注册一个同名服务,但是实现不同,可能就有风险了,可以参考下面的配置改进:

1、引入spring-boot-starter-security jar包。

    org.springframework.boot
    spring-boot-starter-security
    1.4.2.RELEASE

2、在eureka server的application.yml中增加:
security:
  basic:
    enabled: true
  user:
    name: xx
    password: xx123

这样就添加了1个用户名及密码(注:其原理就是spring-security,熟悉spring-security的朋友,也可以改成把用户名/密码存储在数据库中)。
启动后,再浏览eureka server就用输入用户名,密码了。

3、其它服务注册时,相应的defautZone也要改成类似:
eureka:
  client:
    serviceUrl:
      defaultZone: http://xx:xx123@localhost:8091/eureka/
四、spring cloud配置注册中心显示服务的ip地址和端口,在服务提供方的配置文件中添加如下配置
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}
eureka.instance.prefer-ip-address=true
image.png

你可能感兴趣的:(2-1、服务的注册与发现以及安全认证)