纵有疾风起
人生不言弃

Spring Cloud Zuul(服务网关)

新建应用:api-gateway

Spring Cloud Zuul(服务网关)插图

Spring Cloud Zuul(服务网关)插图1

pom.xml

<?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">    <modelVersion>4.0.0</modelVersion>    <groupId>com.example</groupId>    <artifactId>api-gateway</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>api-gateway</name>    <description>Demo project for Spring Boot</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.0.6.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>Finchley.SR2</spring-cloud.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-config</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </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>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

application.yml

server:  port: 9000management:  endpoints:    web:      exposure:        include: '*'  server:    port: 12345zuul:  routes:    configserver:   #自定义的名字      path: /myConfig/**      serviceId: config    user:      path: /myUser/**      serviceId: provider  ignored-patterns:      - /config/**      - /gateway/**  sensitive-headers:  #ignore-local-service: true  忽略默认的路由

bootstrap.yml

spring:  application:    name: gateway  cloud:    zookeeper:      discovery:        register: true      connect-string: 192.168.3.201:2182    config:      discovery:        service-id: config        enabled: true

启用@EnableZuulProxy

package com.example.apigateway;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication@EnableZuulProxypublic class ApiGatewayApplication {    public static void main(String[] args) {        SpringApplication.run(ApiGatewayApplication.class, args);    }}

可以使用:ip:端口/actuator/routes 这样的地址看到已经注册的路由

 

自定义过滤器:需要继承ZuulFilter 

package com.example.apigateway.filter;import com.example.apigateway.util.CookUtil;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.apache.commons.lang.StringUtils;import org.springframework.http.HttpStatus;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;@Componentpublic class TokenFilter extends ZuulFilter {    @Override    /**     * pre     * post     * route     * error     */    public String filterType() {        return PRE_TYPE;    }    @Override    public int filterOrder() {        return PRE_DECORATION_FILTER_ORDER - 1;    }    @Override    public boolean shouldFilter() {        return true;    }    @Override    public Object run() throws ZuulException {        // 获取请求对象        RequestContext context = RequestContext.getCurrentContext();        HttpServletRequest request = context.getRequest();        // 获取地址栏传入的参数        String token = CookUtil.getCookieValue("token", request).getValue();        if (StringUtils.isEmpty(token)) {            context.setSendZuulResponse(false);            context.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());        }        return null;    }}

 

 

完整代码:

https://gitee.com/lm970585581/cloud-config/tree/master/api-gateway

 

文章转载于:https://www.cnblogs.com/lm970585581/p/9905631.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » Spring Cloud Zuul(服务网关)
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录