1. 程式人生 > >idea中建立EurekaServer註冊中心和eureka client和Eureka Server加上安全的使用者認證

idea中建立EurekaServer註冊中心和eureka client和Eureka Server加上安全的使用者認證

new -project 選擇spring initializr

建立自己的包名,類名。

這一步與建立springboot有區別,畫重點了,注意下面的兩個紅框框

專案名

在Application類上添加註解@EnableEurekaServer宣告註冊中心

 

在Application.yml配置檔案新增圖中內容

# eureka.client.registerWithEureka :表示是否將自己註冊到Eureka Server,預設為true。由於當前這個應用就是Eureka Server,故而設為false  
# eureka.client.fetchRegistry :表示是否從Eureka Server獲取註冊資訊,預設為true。因為這是一個單點的Eureka Server,不需要同步其他的Eureka Server節點的資料,故而設為false。
# eureka.client.serviceUrl.defaultZone :設定與Eureka Server互動的地址,查詢服務和註冊服務都需要依賴這個地址。預設是http://localhost:8761/eureka ;多個地址可使用 , 分隔。
server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    #宣告自己是服務端
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

啟動工程,開啟瀏覽器訪問: 
http://localhost:8761 ,介面如下:

 

建立一個服務提供者 (eureka client):

 

controller

package com.xf.eureka_client.controller;

import com.xf.eureka_client.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1/product")
public class ProductController {


    @Autowired
    private ProductService productService;

    /**
     * 獲取所有商品列表
     * @return
     */
    @RequestMapping("list")
    public Object list(){
        return productService.listProduct();
    }


    /**
     * 根據id查詢商品詳情
     * @param id
     * @return
     */
    @RequestMapping("find")
    public Object findById(@RequestParam("id") int id){
        return productService.findById(id);
    }



}

domain

package com.xf.eureka_client.domain;

import java.io.Serializable;

public class Product implements Serializable {


    public  Product(){ }

    public  Product(int id, String name, int price, int store){
        this.id = id;
        this.name = name;
        this.price = price;
        this.store = store;
    }

    private int id;

    /**
     * 商品名稱
     */
    private String name;

    /**
     * 價格,分為單位
     */
    private int price;

    /**
     * 庫存
     */
    private int store;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getStore() {
        return store;
    }

    public void setStore(int store) {
        this.store = store;
    }
}
ProductService
package com.xf.eureka_client.service;


import com.xf.eureka_client.domain.Product;

import java.util.List;

public interface ProductService {

    List<Product> listProduct();

    Product findById(int id);


}

ProductServiceImpl

package com.xf.eureka_client.service.impl;

import com.xf.eureka_client.domain.Product;
import com.xf.eureka_client.service.ProductService;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class ProductServiceImpl implements ProductService
{

    private static final Map<Integer, Product> daoMap = new HashMap<>();

    static {

        Product p1 = new Product(1,"iphonex",9999, 10);
        Product p2 = new Product(2,"冰箱",5342, 19);
        Product p3 = new Product(3,"洗衣機",523, 90);
        Product p4 = new Product(4,"電話",64345, 150);
        Product p5 = new Product(5,"汽車",2345, 140);
        Product p6 = new Product(6,"椅子",253, 20);
        Product p7 = new Product(7,"java程式設計思想",2341, 10);

        daoMap.put(p1.getId(),p1);
        daoMap.put(p2.getId(),p2);
        daoMap.put(p3.getId(),p3);
        daoMap.put(p4.getId(),p4);
        daoMap.put(p5.getId(),p5);
        daoMap.put(p6.getId(),p6);
        daoMap.put(p7.getId(),p7);
    }




    @Override
    public List<Product> listProduct() {

        Collection<Product> collection = daoMap.values();
        List<Product> list = new ArrayList<>(collection);

        return list;
    }

    @Override
    public Product findById(int id) {
        return daoMap.get(id);
    }
}
EurekaClientApplication
package com.xf.eureka_client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;


@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication
{

    public static void main(String[] args)
    {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

application.yml

在Application.yml配置檔案新增內容,注意defaultZone要加上eureka結尾,不然找不到地址註冊

server:
  port: 8771


#指定註冊中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

#服務的名稱
spring:
  application:
    name: product-service

Eureka Server加上安全的使用者認證

我們啟動了Eureka Server,然後在瀏覽器中輸入http://localhost:8761/後,直接回車,就進入了spring cloud的服務治理頁面,這麼做在生產環境是極不安全的,下面,我們就給Eureka Server加上安全的使用者認證.

一、新增spring-security支援並在配置檔案中加入安全認證

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-security</artifactId>  
</dependency> 
# 安全認證的配置
security:
  basic:
    enabled: true #開啟認證
  user:
    name: user
    password: 123456

http://localhost:8761回車後,會發現需要輸入使用者名稱和密碼進行驗證,輸入正確之後,才會進入Eureka Server的服務治理頁面。