• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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集群已生效,消費方接口調用正常

    源碼自取: 

    github地址:https://github.com/L1021204735/myspringcloud2

    版權聲明:本文為qq_36756682原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_36756682/article/details/106965998

    智能推薦

    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/...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡