idea中建立EurekaServer註冊中心和eureka client和Eureka Server加上安全的使用者認證
阿新 • • 發佈:2018-12-02
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,然後在瀏覽器中輸入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的服務治理頁面。