`

Zuul API路由网关服务

阅读更多
1. Zuul API路由网关服务简介

这里的API路由网关服务由Zuul实现,主要就是对外提供服务接口的时候,起到了请求的路由和过滤作用,也因此能够隐藏内部服务的接口细节,从来有利于保护系统的安全性;


2. Zuul路由配置

2.1) 项目microservice-zuul-3001搭建

new -> Maven Module
    -> create a simple project
Module Name: microservice-zuul-3001
Parent Project:microservice
Working set:SpringCloud
    -> Artifact
Group Id:com.andrew.springcloud
Artifact Id: microservice-zuul-3001
Version:0.0.1-SNAPSHOT
Packaging:jar


2.2) 修改hosts文件增加zuul

C:\Windows\System32\drivers\etc打开hosts文件增加zuul
127.0.0.1  zuul.andrew.com


2.3) 项目microservice-zuul-3001的pom.xml增加zuul路由网关

<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>
    <parent>
        <groupId>com.andrew.springcloud</groupId>
        <artifactId>microservice</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>microservice-zuul-3001</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.andrew.springcloud</groupId>
            <artifactId>microservice-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- zuul路由网关 -->
        <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>
        <!-- actuator监控 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- hystrix容错 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- 修改后立即生效,热部署 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
</project>


2.4) 项目microservice-zuul-3001修改application.yml文件

server:
  port: 3001
  context-path: /

spring:
  application:
    name: microservice-zuul

eureka:
  instance:
    instance-id: microservice-zuul:3001 #客户端实例名称
    prefer-ip-address: true #显示IP
  client: 
    service-url: 
      defaultZone: http://eureka2001.andrew.com:2001/eureka/,http://eureka2002.andrew.com:2002/eureka/,http://eureka2003.andrew.com:2003/eureka/ # 集群

info: 
   groupId: $project.groupId$
   artifactId: $project.artifactId$
   version: $project.version$
   负责人: 王五
   联系电话: 110


2.5) 项目microservice-zuul-3001新建启动类ZuulApplication_3001.java

package com.andrew;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
@EnableZuulProxy
public class ZuulApplication_3001 {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication_3001.class, args);
    }
}


启动microservice-eureka-server-2001
启动microservice-eureka-server-2002
启动microservice-eureka-server-2003
启动microservice-student-provider-1001
启动microservice-zuul-3001

获取数据的两种方式
(1)
http://localhost:1001/student/list
(2)
域名+端口+服务名称+请求地址
http://zuul.andrew.com:3001/microservice-student/student/list

[{"id":1,"name":"zhangsan","grade":"11"},{"id":2,"name":"lisi","grade":"12"},{"id":3,"name":"wangwu","grade":"13"},{"id":4,"name":"student04","grade":"14"},{"id":5,"name":null,"grade":null},{"id":6,"name":"student06","grade":"16"}]


3. Zuul路由映射规则配置

3.1) 配置映射规则,提高服务的安全性
zuul:
  routes:
    studentServer.serviceId: microservice-student
    studentServer.path: /studentServer/**
我们把microservice-student的服务名称映射成/studentServer/**这样就把服务地址影藏了
请求方式
http://zuul.andrew.com:3001/studentServer/student/list


3.2) 增加ignored-services: "microservice-student"屏蔽原来的访问方式

假如要忽略所有的服务名称的话,ignored-services: "*"
配置如下
zuul:
  ignored-services: "*"
  routes:
    studentServer.serviceId: microservice-student
    studentServer.path: /studentServer/**


3.3) 配置请求前缀,加下配置prefix: /andrew

3.4) 最终配置
zuul:
  prefix: /andrew
  ignored-services: "*"
  routes:
    studentServer.serviceId: microservice-student
    studentServer.path: /studentServer/**


http://zuul.andrew.com:3001/andrew/studentServer/student/list
[{"id":1,"name":"zhangsan","grade":"11"},{"id":2,"name":"lisi","grade":"12"},{"id":3,"name":"wangwu","grade":"13"},{"id":4,"name":"student04","grade":"14"},{"id":5,"name":null,"grade":null},{"id":6,"name":"student06","grade":"16"}]

http://zuul.andrew.com:3001/studentServer/student/list
http://zuul.andrew.com:3001/microservice-student/student/list
等都是404


4. Zuul请求过滤配置

4.1) 项目microservice-zuul-3001新建过滤器AccessFilter.java

package com.andrew.filter;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;

public class AccessFilter extends ZuulFilter {

    Logger logger = Logger.getLogger(AccessFilter.class);

    /**
     * 判断该过滤器是否要被执行
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 过滤器的具体执行逻辑
     */
    @Override
    public Object run() throws ZuulException {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String parameter = request.getParameter("accessToken");
        logger.info(request.getRequestURL().toString() + " 请求访问");
        if (parameter == null) {
            logger.error("accessToken为空!");
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            ctx.setResponseBody("{\"result\":\"accessToken is empty!\"}");
            return null;
        }
        // token判断逻辑
        logger.info(request.getRequestURL().toString() + " 请求成功");
        return null;
    }

    /**
     * 过滤器的类型 这里用pre,代表会再请求被路由之前执行
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 过滤器的执行顺序
     */
    @Override
    public int filterOrder() {
        return 0;
    }
}


4.2) 项目microservice-zuul-3001开启过滤器ZuulConfig.java

package com.andrew.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.andrew.filter.AccessFilter;

/**
 * Zuul配置
 */
@Configuration
public class ZuulConfig {
    @Bean
    public AccessFilter accessFilter() {
        return new AccessFilter();
    }
}


启动microservice-eureka-server-2001
启动microservice-eureka-server-2002
启动microservice-eureka-server-2003
启动microservice-student-provider-1001
启动microservice-zuul-3001

http://zuul.andrew.com:3001/andrew/studentServer/student/list
{"result":"accessToken is empty!"}

http://zuul.andrew.com:3001/andrew/studentServer/student/list?accessToken=3232
[{"id":1,"name":"zhangsan","grade":"11"},{"id":2,"name":"lisi","grade":"12"},{"id":3,"name":"wangwu","grade":"13"},{"id":4,"name":"student04","grade":"14"},{"id":5,"name":null,"grade":null},{"id":6,"name":"student06","grade":"16"}]
分享到:
评论

相关推荐

    spring cloud 使用Zuul 实现API网关服务问题

    Spring Cloud 使用 Zuul 实现 API 网关服务问题 在本文中,我们将主要介绍如何使用 Spring Cloud 的 Zuul 组件来实现 API 网关服务问题。 Zuul 是一个基于 Netflix Zuul 的 API 网关组件,它可以解决路由规则和服务...

    06Spring Cloud Zuul:API网关服务1

    Spring Cloud Zuul:API网关服务详解 Spring Cloud Zuul 是 Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,支持动态路由与过滤功能。API 网关为微服务架构中的服务提供了统一...

    搭建ZUUL的API网关

    - 社保模块作为微服务的一部分,应设计清晰的API接口,通过ZUUL网关对外提供服务。 - 可以通过ZUUL的过滤器功能,实现在网关层面的身份验证和权限控制,保护社保数据的安全性。 - 如果有多实例的社保微服务,可以...

    Zuul API 网关PPT

    Zuul是一个在微服务架构中扮演API网关角色的组件,它主要负责动态路由、监控、弹性、安全性和灵活性等功能。Zuul API网关不仅仅是传统意义上的代理,它与微服务生态系统紧密集成,能够动态路由和监控进出微服务的...

    ZUUL微服务API网关Java工程代码.zip

    ZUUL微服务API网关是Netflix开源的一个用于构建微服务架构的重要组件,它作为一个边缘服务,处理所有来自客户端的请求,并将这些请求路由到适当的后端服务。在这个"ZUUL微服务API网关Java工程代码.zip"压缩包中,...

    ZUUL的API网关Java代码

    这会自动加载所有相关的ZUUL过滤器,并设置API路由规则。 3. **路由配置**:在`application.yml`或`application.properties`中,我们需要定义路由规则,例如: ``` zuul: routes: service1: path: /service1/*...

    spring-cloud-zuul(包含注册中心、服务生产者、服务消费者、zuul网关路由).zip

    《Spring Cloud Zuul:构建微服务的路由网关》 Spring Cloud Zuul 是一个基于 Netflix Zuul 的微服务网关,它提供了动态路由、过滤器以及面向服务的路由功能,是构建分布式系统的重要组件。在Spring Cloud生态中,...

    【微服务架构】SpringCloud之路由网关(zuul)

    在微服务架构中,Spring Cloud Zuul 是一个重要的组件,它作为边缘服务或者说是路由网关,承担着请求分发、过滤以及安全控制等职责。本文将深入探讨Spring Cloud Zuul 的核心概念、功能和使用方法。 首先,Zuul 是 ...

    springcloud zuul gateway 服务网关

    SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...

    华为-微服务路由网关-Zuul-实战作业

    华为微服务路由网关Zuul实战作业的知识点主要涵盖了微服务架构下使用Zuul作为反向代理和路由网关的全过程,详细包括了Zuul网关的配置、使用以及与Eureka服务注册与发现的整合,还涉及了如何在华为云DevCloud平台上...

    SpringCloud(zuul路由网关)

    SpringCloud是微服务架构中的一个核心组件,它提供了一套完整...以上就是关于SpringCloud中的Zuul路由网关的关键知识点。通过合理使用Zuul,可以极大地提升微服务架构的效率和稳定性,实现更高效的资源调度和服务治理。

    springcloud教程之zuul路由网关的实现

    Spring Cloud之 Zuul 路由网关实现详解 Spring Cloud是一款基于微服务架构的开发框架,它... Zuul 路由网关是一个功能强大且灵活的路由网关解决方案,可以满足微服务架构、 API 网关、云计算平台等多种场景的需求。

    zuul网关登陆鉴权/动态路由

    Zuul 是 Netflix 开源的一款基于 Java 的边缘服务框架,它主要用作微服务架构中的 API 网关。API 网关是系统对外的统一入口,负责路由、过滤、安全控制、负载均衡等任务。在本文中,我们将深入探讨 Zuul 在企业级...

    Spring Cloud Zuul路由网关服务过滤实现代码

    Spring Cloud Zuul 路由网关服务过滤实现代码 Spring Cloud Zuul 路由网关服务过滤实现代码是基于 Spring Cloud Zuul 框架实现的路由网关服务过滤功能,主要用于微服务架构中对服务的路由和过滤。 Zuul 框架提供了...

    springcloud zuul网关服务

    SpringCloud Zuul是基于Spring Cloud框架的一个核心组件,它扮演着API网关的角色,负责路由转发、过滤器处理以及安全控制等任务。...这将有助于你构建自己的API网关服务,提升微服务架构的灵活性和安全性。

    SpringCloud之六 路由网关zuul

    Zuul网关是Netflix开源的Java编写的API网关服务,它能够帮助我们实现路由转发、过滤器功能,简化了服务的动态路由、监控、弹性、安全性的处理。在微服务架构中,服务数量众多,如何有效地管理这些服务的访问和交互,...

    Spring Cloud Zuul动态路由demo

    Spring Cloud Zuul 是一个边缘服务,作为微服务架构中的API网关,它扮演着动态路由、过滤器、安全控制等多种角色。本篇文章将深入探讨如何使用Spring Cloud Zuul实现动态路由,并通过实际的代码示例——"Spring ...

    使用SpringCloud Zuul Proxy构建API网关.docx

    Spring Cloud Zuul 是一个基于 Java 的边缘服务,它可以作为 API 网关,对微服务架构中的所有请求进行路由。Zuul 提供了过滤器机制(Zuul Filters),类似于 Spring 的面向切面编程(AOP),可以实现预处理、路由、...

    使用Spring Cloud Netflix Zuul代理网关访问后台REST服务例子

    在Spring Cloud体系中,Zuul是一个关键组件,用作边缘服务或API网关,用于路由请求、过滤和安全控制。 本文将详细介绍如何使用Spring Cloud Netflix Zuul作为代理网关来访问后台REST服务,以及如何实现前端与后端的...

    zuul网关配置参考

    在微服务架构中,Zuul 是一个非常重要的组件,它作为边缘服务或者API网关,负责处理所有来自客户端的请求,并将这些请求路由到相应的微服务。Spring Boot 结合 Zuul 可以轻松实现这一功能,使得微服务架构更加灵活和...

Global site tag (gtag.js) - Google Analytics