SpringCloud2.x(二) 搭建完整Demo-搭建權限認證模塊、Eureka注冊中心
標簽: springcloud
SpringCloud2.x(二) 搭建完整Demo-搭建權限認證模塊
1.搭建權限認證模塊
2.搭建Eureka注冊中心(服務注冊發現,加密配置,搭建集群)
---------------------------------------------------------------------------------------------------------------------------
1.搭建權限認證模塊
1.1 創建myspringcloud-security模塊,用于為服務生產者接口加密
1.2 配置POM依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>myspringcloud</artifactId>
<groupId>com.en</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>1.0.0</version>
<artifactId>myspringcloud-security</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project>
1.3 父工程添加此依賴
1.4 創建com.en.config路徑,創建WebSecurityConfiguration.java配置類,為所有生產者服務接口加密
package com.en.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
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;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("root").password(new BCryptPasswordEncoder().encode("root")).roles("USER").
and().withUser("admin").password(new BCryptPasswordEncoder().encode("root")).roles("USER", "ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().authorizeRequests().anyRequest()
.fullyAuthenticated();
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}
1.5 生產者服務導入加密依賴
1.6 服務消費方RestConfig類修改,在Http頭信息中加入加密驗證信息
package com.en.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.util.Base64;
@Configuration
public class RestConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
String auth = "admin:root";
byte[] encodedAuth = Base64.getEncoder()
.encode(auth.getBytes(Charset.forName("US-ASCII")));
String authHeader = "Basic " + new String(encodedAuth);
headers.set("Authorization", authHeader);
return headers;
}
}
1.7 服務消費方controller請求修改,調用時在http頭中加入驗證信息
package com.en.controller;
import com.en.po.ProductPo;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
/**
* @ClassName ConsumerProductController
* @Description 服務消費方控制器
* @Author liuxiaobai
* @Date 2020年6月26日09:18:41
* @Version 1.0
**/
@RestController
@RequestMapping("/consumer")
public class ConsumerProductController {
private static final String PRODUCT_GET_URL = "http://localhost:8081/prodcut/getInfoById/";
private static final String PRODUCT_LIST_URL="http://localhost:8081/prodcut/getAllInfo/";
private static final String PRODUCT_ADD_URL = "http://localhost:8081/prodcut/addInfo/";
@Resource
private RestTemplate restTemplate;
@Resource
private HttpHeaders httpHeaders;
@RequestMapping("/product/getInfoById")
public Object getProduct(long id) {
return restTemplate.exchange(PRODUCT_GET_URL + id,HttpMethod.GET,new HttpEntity<>(httpHeaders), ProductPo.class).getBody();
}
@RequestMapping("/product/getAllInfo")
public Object listProduct() {
return restTemplate.exchange(PRODUCT_LIST_URL,HttpMethod.GET,new HttpEntity<>(httpHeaders), List.class).getBody();
}
@RequestMapping("/product/addInfo")
public Object addPorduct(ProductPo productPo) {
return restTemplate.exchange(PRODUCT_ADD_URL, HttpMethod.POST,new HttpEntity<>(productPo,httpHeaders), Boolean.class).getBody();
}
}
1.8 重啟生產者、消費者服務,瀏覽器驗證接口調用,用戶名:admin/root 密碼:root/root
調用時提示輸入驗證信息,輸入后生產者服務接口訪問正常
消費者服務接口訪問正常
2.搭建Eureka注冊中心
2.1 新建Eureka服務端
2.2 導入POM依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>myspringcloud</artifactId>
<groupId>com.en</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>myspringcloud-eureka</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
2.3 修改application.yml,配置eureka相關信息
server:
port: 7001
eureka:
instance: # eureak實例定義
hostname: localhost # 定義 Eureka 實例所在的主機名稱
2.4 創建Eureka啟動類
package com.en.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
2.5 修改服務生產者配置文件,將服務注冊到Eureka
server:
port: 8081
mybatis:
mapper-locations: # 所有的mapper映射文件
- classpath:mapping/*.xml
spring:
application:
name: myspringcloud-provider-product
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置當前要使用的數據源的操作類型
driver-class-name: com.mysql.cj.jdbc.Driver # 配置MySQL的驅動程序類
url: jdbc:mysql://localhost:3306/springcloud?serverTimezone=GMT%2B8 # 數據庫連接地址
username: root
password: root
logging:
level:
com.en.mapper: debug
eureka:
client: # 客戶端進行Eureka注冊的配置
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: microcloud-provider-product
prefer-ip-address: true
info:
app.name: myspringcloud-provider-product
company.name: en
build.artifactId: $project.artifactId$
build.modelVersion: $project.modelVersion$
2.6 服務生產者啟動類加入Eureka客戶端注解
2.7 加入Eureka詳細信息查看功能,修改服務生產者POM引入actuator模塊
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.8 父工程修改POM
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>$</delimiter>
</delimiters>
</configuration>
</plugin>
2.9 啟動Eureka服務器,生產者服務注冊成功
點進去可以看到詳細信息
2.10 現在Eureka已經可以使用了,但啟動的時候抱一個連接的錯誤,修改一下Eureka服務端配置文件
server:
port: 7001
eureka:
server:
eviction-interval-timer-in-ms: 1000 #設置清理的間隔時間,而后這個時間使用的是毫秒單位(默認是60秒)
client:
fetch-registry: false
register-with-eureka: false
instance: # eureak實例定義
hostname: localhost # 定義 Eureka 實例所在的主機名稱
2.11 還有一個問題就是生產者服務宕機后,Eureka服務端還保留著生產者服務的信息,不久后會觸發Eureka安全機制,解決方案為給生產者服務提供一個心跳檢測,修改生產者服務配置文件
server:
port: 8081
mybatis:
mapper-locations: # 所有的mapper映射文件
- classpath:mapping/*.xml
spring:
application:
name: myspringcloud-provider-product
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置當前要使用的數據源的操作類型
driver-class-name: com.mysql.cj.jdbc.Driver # 配置MySQL的驅動程序類
url: jdbc:mysql://localhost:3306/springcloud?serverTimezone=GMT%2B8 # 數據庫連接地址
username: root
password: root
logging:
level:
com.en.mapper: debug
eureka:
client: # 客戶端進行Eureka注冊的配置
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: microcloud-provider-product
prefer-ip-address: true
lease-renewal-interval-in-seconds: 2 # 設置心跳的時間間隔(默認是30秒)
lease-expiration-duration-in-seconds: 5 # 如果現在超過了5秒的間隔(默認是90秒)
info:
app.name: myspringcloud-provider-product
company.name: en
build.artifactId: $project.artifactId$
build.modelVersion: $project.modelVersion$
2.12 現在用SpringSecurity給Eureka提供一個安全認證,POM文件引入SpringSecurity依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.13 修改Eureka服務端application.yml文件,增加用戶、密碼驗證
server:
port: 7001
eureka:
server:
eviction-interval-timer-in-ms: 1000 #設置清理的間隔時間,而后這個時間使用的是毫秒單位(默認是60秒)
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://admin:root@localhost:7001/eureka
instance: # eureak實例定義
hostname: localhost # 定義 Eureka 實例所在的主機名稱
spring:
security:
user:
name: admin
password: root
2.14 修改服務生產者application.yml文件,增加驗證信息
defaultZone: http://admin:root@localhost:7001/eureka
2.15 在Eureka服務端新增權限配置類,關閉csrf劫持
package com.en.config;
import org.springframework.context.annotation.Configuration;
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;
@Configuration
@EnableWebSecurity
public class EurekaSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}
2.16 重啟服務,登錄Eureka前端頁面,提示輸入用戶名信息,登入后一切正常
2.17 優化Eureka高可用,配置Eureka集群,拷貝兩份Eureka服務端,分別改名為Eureka2和Eureka3
2.18 修改本地hosts文件,新增如下內容
127.0.0.1 eureka1
127.0.0.1 eureka2
127.0.0.1 eureka3
2.19 修改Eureka服務端1application.yml配置文件,修改端口以及注冊位置,Eureka2和Eureka3同理
server:
port: 7001
eureka:
server:
eviction-interval-timer-in-ms: 1000 #設置清理的間隔時間,而后這個時間使用的是毫秒單位(默認是60秒)
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://admin:root@eureka:7001/eureka,http://admin:root@eureka2:7002/eureka,http://admin:root@eureka3:7003/eureka
instance: # eureak實例定義
hostname: eureka # 定義 Eureka 實例所在的主機名稱
spring:
security:
user:
name: admin
password: root
2.20 修改服務生產者Eureka注冊地址
server:
port: 8081
mybatis:
mapper-locations: # 所有的mapper映射文件
- classpath:mapping/*.xml
spring:
application:
name: myspringcloud-provider-product
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置當前要使用的數據源的操作類型
driver-class-name: com.mysql.cj.jdbc.Driver # 配置MySQL的驅動程序類
url: jdbc:mysql://localhost:3306/springcloud?serverTimezone=GMT%2B8 # 數據庫連接地址
username: root
password: root
logging:
level:
com.en.mapper: debug
eureka:
client: # 客戶端進行Eureka注冊的配置
service-url:
defaultZone: http://admin:root@eureka:7001/eureka,http://admin:root@eureka2:7002/eureka,http://admin:root@eureka3:7003/eureka
instance:
instance-id: microcloud-provider-product
prefer-ip-address: true
lease-renewal-interval-in-seconds: 2 # 設置心跳的時間間隔(默認是30秒)
lease-expiration-duration-in-seconds: 5 # 如果現在超過了5秒的間隔(默認是90秒)
info:
app.name: myspringcloud-provider-product
company.name: en
build.artifactId: $project.artifactId$
build.modelVersion: $project.modelVersion$
2.21 全部服務重啟,Eureka集群已生效,消費方接口調用正常
源碼自取:
智能推薦
Springcloud(二)注冊中心Eureka搭建
1、Eureka為Springcloud的注冊中心,為最基礎的組成部分! 2、搭建步驟! (1)、新建maven project項目(spring-cloud),作為整個項目的父框架,注意選pom。建好父框架之后,在父項目上右鍵新建maven module模塊作為注冊中心項目(spring-cloud-eureka),根據需要選擇jar/war類型,建好之后如下圖。 (2)、對父項目添加pom依賴...
【SpringCloud】SpringCloud搭建Eureka服務注冊中心
構建項目 使用idea工具直接創建一個新的SpringBoot項目,在選擇依賴的界面勾選Cloud Discovert -> Eureka Server依賴,創建完成后的pom.xml配置文件內容如下: Eureka Server的配置 添加spring-cloud-starter-netflix-eureka-server依賴后,我們就來看看怎么開啟Eureka Server服務。開啟Eu...
springcloud eureka服務注冊中心搭建
1.構建一個maven項目 2.添加maven依賴(所有基礎依賴都放在一個項目下) pom內容如下 整體項目結構圖 啟動類EurekaApplication代碼如下: 配置文件application.properties內容如下 運行EurekaApplication之后頁面訪問如下: 此時發現unavailable-replicas中出現http://master:1111/eureka/,這種...
springcloud項目搭建(一):eureka注冊中心
1.項目版本 springcloud版本:Finchley.RELEASE springboot版本:2.0.3.RELEASE 2.搭建注冊中心 2.1.父類的pom文件配置 2.2.在注冊中心服務的pom.xml導入依賴 2.3.在application.yml文件中配置 2.4.在啟動類上配置注解:@EnableEurekaServer 3.開啟密碼認證 3.1.導入spring secur...
springcloud 1 eureka 注冊中心的搭建
Eureka 是Netflix 的服務發現組件,本身是一個基于rest的服務,它包含Server 和Client 兩部分。從而實現微服務的注冊與發現,下面就粗略的寫下eureka的使用 備注本文章的代碼使用的項目地址 smaug-cloud 啟動類 @EnableEurekaServer 標志該啟動類是一個Eureks Server 相關的配置都在resources 下 application.y...
猜你喜歡
SpringCloud-Eureka注冊中心環境搭建
Eureka注冊中心環境搭建 注明:此項目為本人學習尚硅谷老師的教學視頻然后整理核心的配置文件,所有的項目均在以下地址下載。 https://git...
springcloud(一)搭建Eureka服務注冊中心
(一)創建項目 (二)開發Eureka服務中心 1.啟動類 2.配置文件 application.yml (三)大功告成 啟動項目,瀏覽器訪問:http://localhost:8761/...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...