• springcloud第五步:使用Zuul搭建服务接口网关


    路由网关(zuul)

    什么是网关

    Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能, 类似于nginx转发。

    搭建SpringCloud网关

    创建工程service-zuul

    Maven依赖

    创建工程service-zuul

    <parent>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-parent</artifactId>

                <version>1.5.2.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>

          </properties>

     

          <dependencies>

                <dependency>

                      <groupId>org.springframework.cloud</groupId>

                      <artifactId>spring-cloud-starter-eureka</artifactId>

                </dependency>

                <dependency>

                      <groupId>org.springframework.cloud</groupId>

                      <artifactId>spring-cloud-starter-zuul</artifactId>

                </dependency>

                <dependency>

                      <groupId>org.springframework.boot</groupId>

                      <artifactId>spring-boot-starter-web</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>Dalston.RC1</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>

     

          <repositories>

                <repository>

                      <id>spring-milestones</id>

                      <name>Spring Milestones</name>

                      <url>https://repo.spring.io/milestone</url>

                      <snapshots>

                           <enabled>false</enabled>

                      </snapshots>

                </repository>

          </repositories>

    application.yml配置

    eureka:

      client:

        serviceUrl:

          defaultZone: http://localhost:8888/eureka/

    server:

      port: 8769

    spring:

      application:

        name: service-zuul

    zuul:

      routes:

        api-a:

          path: /api-member/**

          service-id: service-member

        api-b:

          path: /api-order/**

          service-id: service-order

    发送请求http://127.0.0.1:8769/api-member/getMemberAll

    转发到http://127.0.0.1:8762/getMemberAll

    开启网关 @EnableZuulProxy

    服务过滤

    @Component

    public class MyFilter extends ZuulFilter {

     

          private static Logger log = LoggerFactory.getLogger(MyFilter.class);

     

          @Override

          public String filterType() {

                return "pre";

          }

     

          @Override

          public int filterOrder() {

                return 0;

          }

     

          public boolean shouldFilter() {

                return true;

          }

     

          public Object run() {

                RequestContext ctx = RequestContext.getCurrentContext();

                HttpServletRequest request = ctx.getRequest();

                log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));

                Object accessToken = request.getParameter("token");

                if (accessToken != null) {

                      return null;

                }

                log.warn("token is empty");

                ctx.setSendZuulResponse(false);

                ctx.setResponseStatusCode(401);

                try {

                      ctx.getResponse().getWriter().write("token is empty");

                } catch (Exception e) {

                }

                return null;

     

          }

    }

    如果请求参数中没有传入token参数 直接返回报错信息

     

    传入token参数可以正常访问请求

  • 相关阅读:
    qt5--创建控件的两种方式
    qt5-编码转换
    C++qt助手assistant
    C++opencv绘制几何图形
    C++opencv创建图像
    【全球软件大会】华为前端工程师分享:华为云官网的智能化实践
    图解 Redis丨这就是 RDB 快照,能记录实际数据的
    云小课 | 玩转HiLens Studio之快速订购HiLens Studio版本
    带你认识4种设计模式:代理模式、装饰模式、外观模式和享元模式
    线性表、顺序表和链表,你还分不清?
  • 原文地址:https://www.cnblogs.com/XJJD/p/10450196.html
Copyright © 2020-2023  润新知