[JavaEE] SpringCloud集成Zuul網(wǎng)關(guān)

前文鏈接

[JavaEE] 搭建SpringCloud環(huán)境 進(jìn)入微服務(wù)時(shí)代
http://www.reibang.com/p/a0365a635975
溫馨提示:本文是基于前文的擴(kuò)展 沒(méi)有基礎(chǔ)的新手可以先去學(xué)習(xí)上文

一.簡(jiǎn)介

網(wǎng)關(guān)顧名思義很好理解 就是控制網(wǎng)絡(luò)請(qǐng)求出入的關(guān)卡 生活中參考海關(guān) 有些東西可以通行 但是有些國(guó)家嚴(yán)令禁止的東西 是過(guò)不去海關(guān)的

因?yàn)槲覀兒芎美斫?網(wǎng)關(guān)就是做一下過(guò)濾或攔截操作 讓我們的服務(wù)更加安全 用戶訪問(wèn)我們服務(wù)的時(shí)候就要先通過(guò)網(wǎng)關(guān) 然后再由網(wǎng)關(guān)轉(zhuǎn)發(fā)到我們的微服務(wù)

二.快速開始

SpringCloud全家桶中使用Zuul來(lái)搭建網(wǎng)關(guān) 下面我們就來(lái)創(chuàng)建一個(gè)網(wǎng)關(guān)吧!

之后我們配置一下網(wǎng)關(guān)的配置文件

server:
  #服務(wù)端口號(hào)
  port: 8085
spring:
  application:
    #服務(wù)名稱 - 服務(wù)之間使用名稱進(jìn)行通訊
    name: service-zuul
eureka:
  client:
    service-url:
      #填寫注冊(cè)中心服務(wù)器地址
      defaultZone: http://localhost:8081/eureka
zuul:
  routes:
    #設(shè)置服務(wù)a 路徑名稱 隨便起
    service-a:
      path: /service-a/**
      #這里寫a服務(wù)的注冊(cè)名字
      serviceId: service-objcat-a
    #設(shè)置服務(wù)b 路徑名稱 隨便起
    service-b:
      path: /service-b/**
      #這里寫b服務(wù)的注冊(cè)名字
      serviceId: service-objcat-b

之后創(chuàng)建一個(gè)包 名字是com.objcat.filter
創(chuàng)建一個(gè)類TokenFilter 用來(lái)實(shí)現(xiàn)過(guò)濾規(guī)則

類需要繼承于ZuulFilter之后我們重寫ZuulFilter中的方法

/**
     * 過(guò)濾器類型 pre表示在請(qǐng)求之前進(jìn)行邏輯操作
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 過(guò)濾器執(zhí)行順序
     * 當(dāng)一個(gè)請(qǐng)求在同一個(gè)階段存在多個(gè)過(guò)濾器的時(shí)候 過(guò)濾器的執(zhí)行順序
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 是否開啟過(guò)濾
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 編寫過(guò)濾器攔截業(yè)務(wù)邏輯代碼
     */
    @Override
    public Object run() {
        return null;
    }

然后我們開始寫過(guò)濾的邏輯

    /**
     * 編寫過(guò)濾器攔截業(yè)務(wù)邏輯代碼
     */
    @Override
    public Object run() {
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String token = request.getParameter("token");
        if (token == null) {
            currentContext.setSendZuulResponse(false);
            currentContext.setResponseBody("token is null");
            currentContext.setResponseStatusCode(401);
        }
        return null;
    }

邏輯很簡(jiǎn)單 就是校驗(yàn)客戶端發(fā)來(lái)的請(qǐng)求token是否為空 如果為空就不能通過(guò) 返回 token is null

之后我們配置一下入口文件 這個(gè)地方千萬(wàn)不要忘記實(shí)例化出來(lái)filter否則不生效

package com.objcat.servicezuul;

import com.objcat.filter.TokenFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ServiceZuulApplication {

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

    @Bean
    TokenFilter tokenFilter() {
        return new TokenFilter();
    }
}

之后我們來(lái)運(yùn)行服務(wù)試試吧

我們可以清晰的看到 我訪問(wèn)a服務(wù) 只需要使用 網(wǎng)關(guān)的地址 + 網(wǎng)關(guān)的端口號(hào) + 服務(wù)的別名路徑(配置文件中配置) + api名稱 就可以訪問(wèn)了

http://localhost:8085/service-a/hello

當(dāng)沒(méi)有token的時(shí)候返回就是 token is null
當(dāng)token有值的時(shí)候就可以正常進(jìn)行訪問(wèn)了
然后我們來(lái)嘗試訪問(wèn)以下service-a的原地址

http://localhost:8082/hello

這次有些人可能會(huì)有疑問(wèn) 這個(gè)不用token就可以訪問(wèn)嗎??
沒(méi)錯(cuò) 聰明的你應(yīng)該已經(jīng)看出來(lái)了 這個(gè)請(qǐng)求并沒(méi)有經(jīng)過(guò)網(wǎng)關(guān)轉(zhuǎn)發(fā) 是直接訪問(wèn)到目標(biāo)服務(wù)器的 所以并沒(méi)有做token驗(yàn)證

這種網(wǎng)關(guān)轉(zhuǎn)發(fā)之后的請(qǐng)求 就叫做反向代理你可以隱藏你本地的服務(wù)器的真實(shí)地址 只暴露給外界網(wǎng)關(guān)的地址 然后由網(wǎng)關(guān)轉(zhuǎn)發(fā)給服務(wù)器 從而做到安全性更高

好了 到這里網(wǎng)關(guān)配置已經(jīng)完成了.

三.Demo

https://github.com/objcat/test-spring-cloud-demo.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市读存,隨后出現(xiàn)的幾起案子为流,更是在濱河造成了極大的恐慌,老刑警劉巖宪萄,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件艺谆,死亡現(xiàn)場(chǎng)離奇詭異榨惰,居然都是意外死亡拜英,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門琅催,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)居凶,“玉大人,你說(shuō)我怎么就攤上這事藤抡∠辣蹋” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵缠黍,是天一觀的道長(zhǎng)弄兜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瓷式,這世上最難降的妖魔是什么替饿? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮贸典,結(jié)果婚禮上视卢,老公的妹妹穿的比我還像新娘。我一直安慰自己廊驼,他們只是感情好据过,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布惋砂。 她就那樣靜靜地躺著,像睡著了一般绳锅。 火紅的嫁衣襯著肌膚如雪西饵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天鳞芙,我揣著相機(jī)與錄音罗标,去河邊找鬼。 笑死积蜻,一個(gè)胖子當(dāng)著我的面吹牛闯割,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竿拆,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宙拉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丙笋?” 一聲冷哼從身側(cè)響起谢澈,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎御板,沒(méi)想到半個(gè)月后锥忿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怠肋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年敬鬓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笙各。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钉答,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杈抢,到底是詐尸還是另有隱情数尿,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布惶楼,位于F島的核電站右蹦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏歼捐。R本人自食惡果不足惜何陆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窥岩。 院中可真熱鬧甲献,春花似錦、人聲如沸颂翼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至球及,卻和暖如春氧骤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吃引。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工筹陵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镊尺。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓朦佩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庐氮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子语稠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 考慮一個(gè)問(wèn)題,外部的應(yīng)用如何來(lái)訪問(wèn)內(nèi)部各種各樣的微服務(wù)呢弄砍?在微服務(wù)架構(gòu)中仙畦,后端服務(wù)往往不直接開放給調(diào)用端,而是通過(guò)...
    weisen閱讀 2,101評(píng)論 1 9
  • 9.1、分析 我們使用Spring Cloud netflix中的Eureka實(shí)現(xiàn)了服務(wù)注冊(cè)中心以及服務(wù)注冊(cè)與發(fā)現(xiàn)...
    zuoqy閱讀 984評(píng)論 0 5
  • 技術(shù)需求點(diǎn):1.介紹Zuul網(wǎng)關(guān)路由和過(guò)濾器兩大功能的工作原理衣式;2.模擬Zuul路由網(wǎng)關(guān)功能寸士;3.使用Zuul網(wǎng)關(guān)...
    superxcp閱讀 937評(píng)論 0 2
  • 轉(zhuǎn)到https://blog.gokit.info/post/issues-tracker/
    llitfk_DockOne閱讀 672評(píng)論 0 0
  • 感恩堂哥這么關(guān)心我們家,關(guān)心我媽媽的身體狀況瞳收,發(fā)了紅包給我買一些媽媽喜歡吃的東西碉京,感恩感謝厢汹,感恩25好病床的大...
    安琪_ee87閱讀 192評(píng)論 0 0