1. 程式人生 > >基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構(十五)【許可權架構消費者(完整實現)】

基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構(十五)【許可權架構消費者(完整實現)】

      在第十四章我們已經完成了通用業務類的編寫,因此本章我們將講解如何完整的實現我們的許可權架構的消費者的實現,首先開啟我們的rbac-consumer工程,接著開啟我們的主入口檔案RbacConsumerApplication.java加入@EnableDiscoveryClient和@EnableFeignClients註解如下所示:

package com.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class RbacConsumerApplication {

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

      接著在我們的resource底下建立application-prod-7100.properties配置檔案,檔案內容如下:

spring.application.name=rbac-consumer
server.port=7100

# 鏈路資料收集併發送地址
spring.zipkin.base-url=http://127.0.0.1:9100
# 當前應用收集資訊百分比
spring.sleuth.sampler.percentage=0.1

# 實現日誌的輸出
logging.level.com.consumer.routeconsumer.service.RouteService = DEBUG

eureka.client.serviceUrl.defaultZone=http://fjhyll:
[email protected]
:2100/eureka/ # 開啟GZIP的壓縮功能以減少HTTP通訊的消耗。 feign.compression.request.enabled=true; feign.compression.response.enabled=true; # 以下的請求的型別且請求資料的大小超過2048的將為會壓縮傳輸。 feign.compression.request.mime-types=text/xml,application/xml,application/json feign.compression.request.min-request-size=2048 # 設定全域性的超時時間 ribbon.ReadTimeout = 1000 # 該引數用來開啟重試機制,它預設是關閉的。 spring.cloud.loadbalancer.retry.enabled=true # 請求連線的超時時間。 RBAC-PRODUCE.ribbon.ConnectTimeout=250 # 請求處理的超時時間,該超時時間的影響層級大於全域性的超時時間,設定了該時間那麼,如果呼叫生產端的時候超過1秒那麼就直接呼叫重試規則,因此若重試次數和切換次數都是為1那麼,響應的時間不超過4秒 RBAC-PRODUCE.ribbon.ReadTimeout=1000 # 對所有操作請求都進行重試。 RBAC-PRODUCE.ribbon.OkToRetryOnAllOperations=true # 以下重試實現響應EUREKA-PRODUCER的最大次數是 :(1 + MaxAutoRetries)* (1 + MaxAutoRetriesNextServer) # 假設 MaxAutoRetries = 2 ,MaxAutoRetriesNextServer = 4 ,那麼最大的重試次數為15次 # 切換例項的重試次數。 RBAC-PRODUCE.ribbon.MaxAutoRetriesNextServer=1 # 對當前例項的重試次數。 RBAC-PRODUCE.ribbon.MaxAutoRetries=1 feign.hystrix.enabled=true # 這裡需要注意一點, Ribbon的超時與Hystrix的超時是兩個概念。 為了讓上述的重試機制實現有效,我們需要讓Hystrix的超時時間大於Ribbon的超時時間, 否則Hystrix命令超時後,該命令直接熔斷, 重試機制就 沒有任何意義了。 # Hystrix的全域性的超時時間。 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000

       接著在com/consumer/sys/service目錄底下建立一個DictService.java實現類內容如下:

package com.consumer.sys.service;

import com.base.entity.Dict;
import com.base.entity.QueryDict;
import com.consumer.common.base.service.GenericService;
import com.consumer.common.config.FullLogConfiguration;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.Map;

/**
 * Created by Administrator on 2018/1/30 0030.
 */
@FeignClient(value="RBAC-PRODUCE",configuration = FullLogConfiguration.class,path = "/dict")
public interface DictService extends GenericService<Dict,QueryDict> {

    /**
     * 功能描述:將字典資料初始化到前端js中
     * @return
     */
    @RequestMapping(value = "/loadDict",method = RequestMethod.POST)
    Map<String,Object> loadDict();



}

      最後在我們的com/produce/sys/controller底下建立我們的DictController.java實現類內容如下:

package com.consumer.sys.controller;

import com.base.entity.Dict;
import com.base.entity.QueryDict;
import com.consumer.common.base.controller.GenericController;
import com.consumer.common.base.service.GenericService;
import com.consumer.sys.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/*
* 類描述:
* @auther linzf
* @create 2018/1/30 0030 
*/
@RestController
@RequestMapping("/dict")
public class DictController  extends GenericController<Dict,QueryDict> {

    @Autowired
    private DictService dictService;

    @Override
    protected GenericService<Dict, QueryDict> getService() {
        return dictService;
    }

    /**
     * 功能描述:將字典資料初始化到前端js中
     * @return
     */
    @RequestMapping(value = "/loadDict",method = RequestMethod.POST)
    public Map<String,Object> loadDict(){
        return dictService.loadDict();
    }
}

      為了方便我們測試,我們需要給我們的許可權架構消費者整合swagger2介面調測工具,因此在我們的config包底下新建一個swagger包同時建立我們的SwaggerConfig.java配置檔案,配置內容如下:

package com.consumer.common.config.swagger;

import com.google.common.base.Predicate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.BasicErrorController;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


/*
* 類描述:整合swagger框架
* @auther linzf
* @create 2017/8/9 0009 
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Autowired
    private Environment env;


    @Bean
    public Docket createRestApi() {
        Predicate<RequestHandler> predicate = new Predicate<RequestHandler>() {
            @Override
            public boolean apply(RequestHandler input) {
                // 除非是在開發環境中否則不開啟swagger2
                String active = env.getProperty("spring.profiles.active");
                if(!active.equalsIgnoreCase("prod-7100")){
                    return false;
                }
                Class<?> declaringClass = input.declaringClass();
                if (declaringClass == BasicErrorController.class)// 排除
                    return false;
                if(declaringClass.isAnnotationPresent(RestController.class)) // 被註解的類
                    return true;
                if(input.isAnnotatedWith(ResponseBody.class)) // 被註解的方法
                    return true;
                return false;
            }
        };
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .useDefaultResponseMessages(false)
                .select()
                .apis(predicate)
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("swagger2 介面測試專用頁面!")//大標題
                .version("1.0")//版本
                .build();
    }

}

      到此我們完成了資料字典的配置工作,其他的使用者管理、組織架構、角色管理和選單管理也完全如上就不在此處累述了,大家直接看本章釋出在GitHub上的原始碼即可。

      接著我們啟動我們的註冊中心、鏈路中心、許可權架構生產者、許可權架構消費者,接著開啟我們的eureka註冊中心大家可以看到如下的頁面則說明我們的所有中心已經全部正常啟動成功了:


      接著直接訪問我們的swagger工程地址:http://127.0.0.1:7100/swagger-ui.html#/,那麼我們會看到如下的頁面則表示我們的許可權架構消費者已經整合成功了。



QQ交流群:578746866


相關推薦

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構消費者完整實現

      在第十四章我們已經完成了通用業務類的編寫,因此本章我們將講解如何完整的實現我們的許可權架構的消費者的實現,首先開啟我們的rbac-consumer工程,接著開啟我們的主入口檔案RbacConsumerApplication.java加入@EnableDiscove

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構生產者組織架構

      在第十章我們完成了對使用者管理的整合,本章我們將完成對組織架構管理的整合開發工作,首先開啟我們的rbac-produce工程,接著在com/produce/sys/dao目錄底下建立一個UserDao.java介面內容如下:package com.produce.

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構路由閘道器

      在前面十六章我們完成了註冊中心、鏈路中心、許可權架構生產者、許可權架構消費者的整合開發工作,本章將開始重點講解我們的路由閘道器的實現,由於我們的微服務內部是無許可權的,因此我們的微服務內部是不對外暴露埠的,所有的請求全部通過路由閘道器來進行請求的,因此在本章我們的

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構消費者通用類編寫

       許可權架構的消費者和許可權架構的生產者一樣可以高度抽象化我們的通用接口出來,因此本章我們將這些消費者介面高度抽象出來,理論上這些高度抽象出來的介面是可以作為一個獨立的module需要的時候使用maven引入,不過此處就不再解耦出來,而是直接寫在我們的許可權架構服

基於springboot+redis+bootstrap+mysql開發屬於自己分散式springcloud許可權架構許可權架構生產者角色管理

      在第七章我們完成了對資料字典的整合,本章我們將完成角色管理的整合工作,首先開啟我們的rbac-produce工程,接著在com/produce/sys/dao目錄底下建立一個UserRoleDao.java介面內容如下:package com.produce.sy

設計和開發簡單自己主動化UI框架

depth 定義 其它 而是 例如 選擇 span debug etl !有興趣的朋友請直接移步Github,本帖子已經不做更新,框架的詳細的實現已經做了優化和代碼整理,本文僅僅介紹了詳細的設計思路! 目標:編寫一個簡單通用UI框架用於管理頁面和完

基於SpringBoot開發完整的專案準備工作

1.1 SpringBoot簡介① 為所有Spring 開發提供一個更快更廣泛的人門體驗。② 零配置。無冗餘程式碼生成和XML 強制配置,遵循“約定大於配置” 。③ 集成了大量常用的第三方庫的配置, Spring Boot 應用為這些第三方庫提供了幾乎可以零配置的開箱即用的能

基於SpringBoot開發完整的專案準備工作

1.SpringBoot框架內容        想了一下,覺得在開發之前應該先大致瞭解一下springboot框架的概括,然後在後面的開發過程中再進一步加深理解,做到知其然知其所以然!Spring Boot 是基於Spring 框架技術來構建的,所以Spring Boot 又

基於ASP.Net Core開發通用後臺框架記錄-(資料庫設計(許可權模組))

寫在前面 本系列部落格是本人在學習的過程中搭建學習的記錄,如果對你有所幫助那再好不過。如果您有發現錯誤,請告知我,我會第一時間修改。 前期我不會公開原始碼,我想是一點點敲程式碼,不然複製、貼上那就沒意思了。而且很多程式碼(比如Identity Server4)網上也有很多類似的教程及成熟的框架。這裡只是想,知

如何快速開發微信商城小程序?

消息 定位 bsp 相對 weixin 經驗 運營 上線 未來 小程序的價值相信已經不用我多說,未來大部分應用場景都將使用微信小程序進行研發。開發一套商城小程序需要哪些步驟,怎麽開通?快搞定小編來為大家解疑。 第一步:確定商城小程序產品功能、UI風格 在設計小程序的時

python3.6+django2.0 小時學會開發學員管理系統demo

lean pycharm 成了 ... ati etl $.ajax size static 1.在pycharm中新建project demo1 添加app01 點擊create按鈕完成新建 2.在demo項目目錄下新建目錄static,並在settings.py中追加代

xlauch 1.0 基於springboot + mybatis + beetls 快速開發腳手架

springboot xlauch java beetl mybatis xlauch xlauch 是基於springboot + mybatis + beetls 快速開發腳手架, 包含了用戶管理,組織機構管理,角色管理,功能點管理,菜單管理,權限分配,數據權限分配,代碼生成,二次開

開發多使用者商城系統需要多少錢?

如果不考慮二次開發,不考慮購買授權, 你可以按人工成本來計算, 比如4個PHP程式設計師,2個前端程式設計師,開發6個月, 假設每個程式設計師平均月薪為8千,算下來就是:(4+2)*8*6=28.8萬. 感覺這個價位也比較合理。 這可能是一個PC前端和後臺的功能開發, 首

開發易利購系統原始碼流程文件

    商城類小程式是所有類別小程式中開發的熱點,但其相對於其他類別的小程式,具有邏輯複雜、功能需求較大等特點,因此,對開發者具有一定的基礎要求。 那我們就止步於前了嗎? 當然不! 本文主要講述商城小程式開發的過程,並附上了原始碼,希望對各個開發者能有所幫助。 一、

微信公眾號 基於PHP 拼團活動開發 模板搭建

已測試號為例;使用者發起拼團活動(為團長),回覆給他帶有活動id與其openid的二維碼圖片,轉發給他人,已關注的掃碼之後儲存其openid,未關注的在關注之後儲存openid(防止重複參與)(團員),然後自動回覆團員自己活動資訊的二維碼。 1.微信公眾號後臺配置好 伺服器

SSM+Redis+Bootstrap-fileinput開發圖片上傳程式

一、背景 由於最近作業要寫一個JSP+Servlet的圖片上傳程式。再加上最近在學Spring,在寫這個作業的時候想到很多的騷操作。想也沒想就搞上了。廢話不多說,接下來開始介紹這個程式。本程式已經上傳到Github,文章連結附加在文章末尾。 二、技術棧 後端:Sprin

《連載 | 物聯網框架ServerSuperIO教程》-4.如開發裝置驅動,同時支援串列埠和網路通訊。附:將來支援Windows 10 IOT

注:ServerSuperIO有可能被移植到Windows 10 IOT上,那麼將來有可能開發一套裝置驅動,可以支行在服務端、嵌入式裝置中,將形成完整的解決方案。       現在已經除錯通過部分程式碼,還得需要一段時間,一般都是晚上幹,時間也有限。如下圖: 目       錄

開發自己的作業系統

作業系統一般指電腦上使用的系統,比如咱們常用的Windows,Linux,Mac OS 等。在投資圈作業系統是指,一套買賣操作的標準。比如"均線之上做多,均線之下做空"。就是一條非常簡單的規則,也可以

Android 和IOS 混合開發,程式碼兩處執行-----Flutter

轉載自:https://www.jianshu.com/p/8baa8ed2414d什麼是Flutter2018年2月27日,在2018世界移動大會上,Google釋出了Flutter的第一個Beta版本。Flutter是Google用以幫助開發者在Ios和Android兩個平臺開發高質量原生應用的全新移動U

基於spring boot和mongodb打造完整許可權架構整合使用者模組、選單模組、角色模組

      在第四章我們已經實現了對security的整合,我們已經實現了登陸到我們的系統中了,但是大家會發現我們登陸成功以後並沒有顯示左側的選單節點,本章我們將開始整合使用者模組、選單模組以及角色模組。      1、首先我們需要在sys的entity目錄底下建立Tree、