精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

內外網接口微服務隔離如何實現

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-02 16:19 ? 次閱讀

1. 內外網接口微服務隔離

2. 網關 + redis 實現白名單機制

3. 方案三 網關 + AOP

具體實操

在業務開發的時候,經常會遇到某一個接口不能對外暴露,只能內網服務間調用的實際需求。面對這樣的情況,我們該如何實現呢?今天,我們就來理一理這個問題,從幾個可行的方案中,挑選一個來實現。

1. 內外網接口微服務隔離

將對外暴露的接口和對內暴露的接口分別放到兩個微服務上,一個服務里所有的接口均對外暴露,另一個服務的接口只能內網服務間調用。

該方案需要額外編寫一個只對內部暴露接口的微服務,將所有只能對內暴露的業務接口聚合到這個微服務里,通過這個聚合的微服務,分別去各個業務側獲取資源。

該方案,新增一個微服務做請求轉發,增加了系統的復雜性,增大了調用耗時以及后期的維護成本。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

2. 網關 + redis 實現白名單機制

在 redis 里維護一套接口白名單列表,外部請求到達網關時,從 redis 獲取接口白名單,在白名單內的接口放行,反之拒絕掉。

該方案的好處是,對業務代碼零侵入,只需要維護好白名單列表即可;

不足之處在于,白名單的維護是一個持續性投入的工作,在很多公司,業務開發無法直接觸及到 redis,只能提工單申請,增加了開發成本;另外,每次請求進來,都需要判斷白名單,增加了系統響應耗時,考慮到正常情況下外部進來的請求大部分都是在白名單內的,只有極少數惡意請求才會被白名單機制所攔截,所以該方案的性價比很低。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://gitee.com/zhijiantianya/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

3. 方案三 網關 + AOP

相比于方案二對接口進行白名單判斷而言,方案三是對請求來源進行判斷,并將該判斷下沉到業務側。避免了網關側的邏輯判斷,從而提升系統響應速度。

我們知道,外部進來的請求一定會經過網關再被分發到具體的業務側,內部服務間的調用是不用走外部網關的(走 k8s 的 service)。

根據這個特點,我們可以對所有經過網關的請求的header里添加一個字段,業務側接口收到請求后,判斷header里是否有該字段,如果有,則說明該請求來自外部,沒有,則屬于內部服務的調用,再根據該接口是否屬于內部接口來決定是否放行該請求。

該方案將內外網訪問權限的處理分布到各個業務側進行,消除了由網關來處理的系統性瓶頸;同時,開發者可以在業務側直接確定接口的內外網訪問權限,提升開發效率的同時,增加了代碼的可讀性。

當然該方案會對業務代碼有一定的侵入性,不過可以通過注解的形式,最大限度的降低這種侵入性。

4114d15a-573d-11ed-a3b6-dac502259ad0.jpg

具體實操

下面就方案三,進行具體的代碼演示。

首先在網關側,需要對進來的請求header添加外網標識符: from=public

@Component
publicclassAuthFilterimplementsGlobalFilter,Ordered{
@Override
publicMonofilter(ServerWebExchangeexchange,GatewayFilterChainchain){
returnchain.filter(
exchange.mutate().request(
exchange.getRequest().mutate().header("id","").header("from","public").build())
.build()
);
}

@Override
publicintgetOrder(){
return0;
}
}

接著,編寫內外網訪問權限判斷的AOP和注解

@Aspect
@Component
@Slf4j
publicclassOnlyIntranetAccessAspect{
@Pointcut("@within(org.openmmlab.platform.common.annotation.OnlyIntranetAccess)")
publicvoidonlyIntranetAccessOnClass(){}
@Pointcut("@annotation(org.openmmlab.platform.common.annotation.OnlyIntranetAccess)")
publicvoidonlyIntranetAccessOnMethed(){
}

@Before(value="onlyIntranetAccessOnMethed()||onlyIntranetAccessOnClass()")
publicvoidbefore(){
HttpServletRequesthsr=((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
Stringfrom=hsr.getHeader("from");
if(!StringUtils.isEmpty(from)&&"public".equals(from)){
log.error("Thisapiisonlyallowedinvokedbyintranetsource");
thrownewMMException(ReturnEnum.C_NETWORK_INTERNET_ACCESS_NOT_ALLOWED_ERROR);
}
}
}

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceOnlyIntranetAccess{
}

最后,在只能內網訪問的接口上加上@OnlyIntranetAccess注解即可

@GetMapping("/role/add")
@OnlyIntranetAccess
publicStringonlyIntranetAccess(){
return"該接口只允許內部服務調用";
}

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8526

    瀏覽量

    150862
  • 數據
    +關注

    關注

    8

    文章

    6909

    瀏覽量

    88849
  • 微服務
    +關注

    關注

    0

    文章

    134

    瀏覽量

    7328

原文標題:業務開發時,接口不能對外暴露怎么辦?

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    采用apache-httpd的微服務請求代理實現

    2018-12-06 基于apache-httpd實現微服務的請求代理
    發表于 05-17 13:11

    微服務架構和CQRS架構基本概念介紹

    微服務架構現在很熱,到處可以看到各大互聯網公司的微服務實踐的分享總結。但是,我今天的分享和微服務沒有關系,希望可以帶給大家一些新的東西。如果一定要說微服務和CQRS架構的關系,那我覺得
    發表于 05-22 09:03

    如何遙開內外網穿透的問題

    使用openh323的程序升級到h323plus,利用其h.460.18 ,19 或其上的Nat功能,配合公網的GnuGK來實現內外網的穿透.2. 用另
    發表于 11-03 06:29

    微服務網關gateway的相關資料推薦

    目錄微服務網關 gateway 概述[路由器網關 Zuul 概述]嵌入式 Zuul 反向代理微服務網關 gateway 概述1、想象一下一個購物應用程序的產品詳情頁面展示了指定商品的信息:2、若是
    發表于 12-23 08:19

    TFTP不支持內外網傳輸嗎?

    云端服務器上搭建了tftp服務器,開發板上運行tftp客戶端,開發板不能從服務器上拉取文件,本地電腦也不能從服務器上拉取文件,tftp不支持內外網
    發表于 02-16 11:51

    CSmail郵件系統內外網安全隔離解決方案

    CSmail郵件系統內外網安全隔離解決方案 需求分析  電子郵件已經是主要的辦公、交流手段,在政府、軍隊、企業等對安全要求很高的單
    發表于 01-08 13:36 ?1507次閱讀

    我所理解的SOA和微服務

    本文主要淺談SOA和微服務。SOA和微服務兩者說到底都是對外提供接口的一種架構設計方式,微服務其實就是隨著互聯網的發展,復雜的平臺、業務的出現,導致SOA架構向更細粒度、更通過化程度發
    的頭像 發表于 02-07 14:19 ?3642次閱讀
    我所理解的SOA和<b class='flag-5'>微服務</b>

    微服務優勢_微服務架構的好處與不足

    微服務是用一組小服務的方式來構建一個應用,服務獨立運行在不同的進程中,服務之間通過輕量的通訊機制(如RESTful接口)來交互,并且
    發表于 02-23 11:24 ?4388次閱讀

    Linux微服務架構中容錯隔離的詳細資料技術

    對應到微服務架構中,我們要做的就是最大限度的隔離單個服務的風險,也就是「 容錯隔離 」的方法。
    的頭像 發表于 06-30 10:21 ?3323次閱讀

    通過微服務原理、領域驅動設計概念等來成功實現微服務

    組織通過微服務基本準則、領域驅動的設計概念和編碼優秀實踐成功地使用微服務,可以充分利用Kubernetes/容器原生的優勢。
    的頭像 發表于 08-14 10:02 ?1887次閱讀

    如何遙開內外網穿透的問題 --- MCU做簡單外網代理

    : ?????????? 1. 把原有使用openh323的程序升級到h323plus,利用其h.460.18 ,19 或其上的Nat功能,配合公網的GnuGK來實現內外網的穿透.?????????? 2. 用另
    發表于 10-28 19:21 ?10次下載
    如何遙開<b class='flag-5'>內外網</b>穿透的問題 --- MCU做簡單<b class='flag-5'>外網</b>代理

    一文搞懂室內外網線不同

    網線從其應用場景來看分為室外網線和室內網線,室內外網線有什么不同呢?這是很多網友的疑問,為了幫助大家正確選擇,科蘭通訊小編圍繞室內外網線展開介紹。 室內外網線不同: 顧名思義,室
    的頭像 發表于 07-27 14:43 ?4614次閱讀
    一文搞懂室<b class='flag-5'>內外網</b>線不同

    一文搞懂室內外網線不同

    網線從其應用場景來看分為室外網線和室內網線,室內外網線有什么不同呢?這是很多網友的疑問,為了幫助大家正確選擇,科蘭通訊小編圍繞室內外網線展開介紹。 室內外網線不同: 顧名思義,室
    的頭像 發表于 07-11 10:58 ?1649次閱讀
    一文搞懂室<b class='flag-5'>內外網</b>線不同

    邊緣計算微服務操作系統的設計與實現

    面對邊緣計算運行環境不統一、適配難,工業邊緣計算微服務開發難度高,微服務生態系統碎片化,以及工業邊緣計算行業應用難以落地等技術和行業共性問題,本文實現了一種邊緣計算微服務操作系統,包括
    的頭像 發表于 08-31 16:49 ?1070次閱讀
    邊緣計算<b class='flag-5'>微服務</b>操作系統的設計與<b class='flag-5'>實現</b>

    如何構建彈性、高可用的微服務

    基于微服務的應用程序可實現戰略性數字轉型和云遷移計劃,對于開發團隊來說,這種架構十分重要。那么,如何來構建彈性、高可用的微服務呢?RedisEnterprise給出了一個完美的方案。文況速覽
    的頭像 發表于 11-26 08:06 ?456次閱讀
    如何構建彈性、高可用的<b class='flag-5'>微服務</b>?