中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Cloud中的API網關服務Zuul怎么配置

發布時間:2021-12-07 11:57:23 來源:億速云 閱讀:181 作者:iii 欄目:大數據

這篇文章主要講解了“Spring Cloud中的API網關服務Zuul怎么配置”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring Cloud中的API網關服務Zuul怎么配置”吧!

構建網關

網關的構建我們通過下面三個步驟來實現。

1.創建Spring Boot工程并添加依賴

首先我們創建一個普通的Spring Boot工程名為api-gateway,然后添加相關依賴,這里我們主要添加兩個依賴spring-cloud-starter-zuul和spring-cloud-starter-eureka,spring-cloud-starter-zuul依賴中則包含了ribbon、hystrix、actuator等,如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Dalston.SR3</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zuul</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.添加注解

然后在入口類上添加@EnableZuulProxy注解表示開啟Zuul的API網關服務功能,如下:

@SpringBootApplication
@EnableZuulProxy
public class ApiGatewayApplication {

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

3.配置路由規則

application.properties文件中的配置可以分為兩部分,一部分是Zuul應用的基礎信息,還有一部分則是路由規則,如下:

# 基礎信息配置
spring.application.name=api-gateway
server.port=2006
# 路由規則配置
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=feign-consumer

# API網關也將作為一個服務注冊到eureka-server上
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/

我們在這里配置了路由規則所有符合/api-a/**的請求都將被轉發到feign-consumer服務上,至于feign-consumer服務的地址到底是什么則由eureka-server去分析,我們這里只需要寫上服務名即可。以上面的配置為例,如果我請求http://localhost:2006/api-a/hello1接口則相當于請求http://localhost:2005/hello1(我這里feign-consumer的地址為http://localhost:2005),我們在路由規則中配置的api-a是路由的名字,可以任意定義,但是一組path和serviceId映射關系的路由名要相同。

OK,做好這些之后,我們依次啟動我們的eureka-server、provider和feign-consumer,然后訪問如下地址http://localhost:2006/api-a/hello1

看到這個效果說明我們的API網關服務已經構建成功了,我們發送的符合路由規則的請求自動被轉發到相應的服務上去處理了。

請求過濾

構建好了網關,接下來我們就來看看如何利用網關來實現一個簡單的權限驗證。這里就涉及到了Spring Cloud Zuul中的另外一個核心功能:請求過濾。請求過濾有點類似于Java中Filter過濾器,先將所有的請求攔截下來,然后根據現場情況做出不同的處理,這里我們就來看看Zuul中的過濾器要如何使用。很簡單,兩個步驟:

1.定義過濾器

首先我們定義一個過濾器繼承自ZuulFilter,如下:

public class PermisFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String login = request.getParameter("login");
        if (login == null) {
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            ctx.addZuulResponseHeader("content-type","text/html;charset=utf-8");
            ctx.setResponseBody("非法訪問");
        }
        return null;
    }
}

關于這個類我說如下幾點:

1.filterType方法的返回值為過濾器的類型,過濾器的類型決定了過濾器在哪個生命周期執行,pre表示在路由之前執行過濾器,其他可選值還有post、error、route和static,當然也可以自定義。
2.filterOrder方法表示過濾器的執行順序,當過濾器很多時,這個方法會有意義。
3.shouldFilter方法用來判斷過濾器是否執行,true表示執行,false表示不執行,在實際開發中,我們可以根據當前請求地址來決定要不要對該地址進行過濾,這里我直接返回true。
4.run方法則表示過濾的具體邏輯,假設請求地址中攜帶了login參數的話,則認為是合法請求,否則就是非法請求,如果是非法請求的話,首先設置ctx.setSendZuulResponse(false);表示不對該請求進行路由,然后設置響應碼和響應值。這個run方法的返回值在當前版本(Dalston.SR3)中暫時沒有任何意義,可以返回任意值。

2.配置過濾器Bean

然后在入口類中配置相關的Bean即可,如下:

@Bean
PermisFilter permisFilter() {
    return new PermisFilter();
}

感謝各位的閱讀,以上就是“Spring Cloud中的API網關服務Zuul怎么配置”的內容了,經過本文的學習后,相信大家對Spring Cloud中的API網關服務Zuul怎么配置這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林甸县| 阿城市| 那曲县| 谢通门县| 连云港市| 宣化县| 巴彦县| 邹平县| 枝江市| 萨嘎县| 龙里县| 肇庆市| 扶沟县| 七台河市| 阿城市| 额济纳旗| 杭州市| 洛隆县| 凉城县| 乡城县| 长兴县| 株洲市| 崇礼县| 曲麻莱县| 庆云县| 青浦区| 深圳市| 淮安市| 淅川县| 长顺县| 津市市| 竹溪县| 化州市| 新野县| 龙游县| 清苑县| 城步| 文昌市| 漯河市| 象山县| 和平区|