Idea下SpringCloud2实验(四、Zuul网关实现路由转发和过滤)

一、创建springBoot项目springcloud-zuul-server项目

二、配置文件

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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.jane</groupId>
    <artifactId>springcloud-zuul-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloud-zuul-server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-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>${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>

2、启动文件

package com.jane.springcloudzuulserver;

import com.jane.springcloudzuulserver.filter.TokenFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class SpringcloudZuulServerApplication {

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

    //将过滤器在spring生成
    @Bean
    public TokenFilter tokenFilter() {
        return new TokenFilter();
    }

}

3、application.properties

server.port=6030
spring.application.name=zuul-gateway
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6001/eureka/
zuul.routes.springcloud-eureka-customer.path=/springcloud-eureka-customer/**

4、过滤器TokenFilter

package com.jane.springcloudzuulserver.filter;

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

import javax.servlet.http.HttpServletRequest;

public class TokenFilter extends ZuulFilter {

    //pre:主要用在路由映射的阶段是寻找路由映射表的
    //routing:具体的路由转发过滤器是在routing路由器,具体的请求转发的时候会调用
    //error:一旦前面的过滤器出错了,会调用error过滤器。
    //post:当routing,error运行完后才会调用该过滤器,是在最后阶段的
    @Override
    public String filterType() {
        return "pre";
    }

    //自定义过滤器执行的顺序,数值越大越靠后执行,越小就越先执行
    @Override
    public int filterOrder() {
        return 0;
    }

    //控制过滤器生效不生效,可以在里面写一串逻辑来控制,true是生效
    @Override
    public boolean shouldFilter() {
        return true;
    }

    //执行过滤逻辑
    @Override
    public Object run() throws ZuulException {
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        //如果有授权服务器,这里可以做统一登陆授权校验
        String token = request.getParameter("token");
        if(token == null) {
            context.setSendZuulResponse(false);
            context.setResponseStatusCode(401);
            context.setResponseBody("no token , Auth deny");
        }
        return null;
    }
}

三、启动文件,结合之前的文章 注册中心 服务提供者 服务消费,全部启动
1、服务如下图:

2、访问结果如下

没有token的请求:

有token的请求:

原文地址:https://blog.51cto.com/janephp/2394514

时间: 2024-08-30 03:42:58

Idea下SpringCloud2实验(四、Zuul网关实现路由转发和过滤)的相关文章

Zuul网关过滤器中转发头信息不起作用

大家应该都知道在做Zuul网关过滤的时候,如果不在网关过滤时转发头信息,经过网关时头信息就会丢失. 但我用 addZuulRequestHeader转发头信息时,却不起作用,在子服务的controller取不到头信息的内容,代码如下: 1.引入依赖 1 <dependencies> 2 <dependency> 3 <groupId>org.springframework.cloud</groupId> 4 <artifactId>spring-

实验四 利用单臂路由实现VLAN间路由

[实验名称] 利用单臂路由实现VLAN间路由. [实验目的] 掌握如何在路由器上划分子接口.封装Dot1q(IEEE 802.1q)协议,实现VLAN间的路由. [需求分析] 需要在交换机上配置VLAN,然后在路由器连接交换机的端口上划分子接口,给相应的VLAN设置IP地址,以实现VLAN间的路由. [实验设备] 三层交换机一台. 路由器一台. [预备知识] 交换机的基本配置方法.VLAN的工作方法.Trunk的工原理和配制作原则和配置方法. [实验原理] 在交换网络中,通过VLAN对一个物理网

SpringCloud2.0 Zuul 网关路由 基础教程(十)

1.启动基础工程 1.1.启动[服务注册中心],工程名称:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 1.2.启动[服务提供者],工程名称:springcloud-eureka-client 参考 SpringCloud2.0 Eureka Client 服务注册 基础教程(三) 1.3.启动[服务消费者],工程名称:springcloud-eureka-ribbon 参考 SpringCloud2

Packet Tracer 5.0实验(四) 利用三层交换机实现VLAN间路由

Packet Tracer 5.0实验(四) 利用三层交换机实现VLAN间路由 一.实验目标 掌握交换机Tag VLAN 的配置: 掌握三层交换机基本配置方法: 掌握三层交换机VLAN路由的配置方法: 通过三层交换机实现VLAN间相互通信: 二.实验背景 某企业有两个主要部门,技术部和销售部,分处于不同的办公室,为了安全和便于管理,对两个 部门的主机进行了VLAN的划分,技术部和销售部分处于不同的VLAN.现由于业务的需求,需要销售部和技术部的主机能够相互访问,获得相应的资源,两个 部门的交换机

zuul网关Filter处理流程及异常处理

本文转载自:https://blog.csdn.net/tianyaleixiaowu/article/details/77893822 上一篇介绍了java网关Zuul的简单使用,进行请求路由转发和过滤器的基本操作. 这一篇主要看一下它的过滤器Filter的工作流程及异常处理. 首先看到Filter的四个方法,FilterType,filterOrder,shouldFilter,run. filterType代表过滤类型 PRE: 该类型的filters在Request routing到源w

springcloud(七,多个服务消费者配置,以及zuul网关案例)

spring cloud (一.服务注册demo_eureka) spring cloud (二.服务注册安全demo_eureka) spring cloud (三.服务提供者demo_provider) spring cloud (四.服务消费者demo_consumer) springcloud(五,多个服务注册中心eureka) springcloud(六,多个服务提供者) 多个服务消费者同上面的提供者和服务注册一样的哈,就是复制出来两个,把端口改一下即可 这里就不做截图了 直接开始zu

Spring Cloud系列-Zuul网关集成JWT身份验证

前言 这两三年项目中一直在使用比较流行的spring cloud框架,也算有一定积累,打算有时间就整理一些干货与大家分享. 本次分享zuul网关集成jwt身份验证 业务背景 项目开发少不了身份认证,jwt作为当下比较流行的身份认证方式之一主要的特点是无状态,把信息放在客户端,服务器端不需要保存session,适合分布式系统使用. 把jwt集成在网关的好处是业务工程不需要关心身份验证,专注业务逻辑(网关可验证token后,把解析出来的身份信息如userId,放在请求头传递给业务工程). 顺便分享下

springcloud zuul 网关

zuul网关简介 Zuul 网关的核心 是系列过滤器,可以在 Http 请求发起和响应返回期间执行 系列的过滤器. Zuul 包括以下 四种过滤器: 1,PRE 过滤器 它是在请求路由到具体的服务之前执行的,这种类型的过滤器可 以做安全验证,例如身份验证. 参数验证等. 2,ROUTING 过滤器 它用于将请求路由到具体的微服务 .在默认情况下,它使用Http Client 进行网络请求. 3,POST 过滤器:它是在请求己被路由到微服务后执行的,一 般情况下,用作收集统计信息.指标,以及将响

操作系统 实验四主存空间的分配和回收

实验四主存空间的分配和回收 1.    目的和要求 1.1.           实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2.           实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法.循环首次适应算法.最佳适应算法和最坏适应算法4种算法完成设计. (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收.采用分区说明表进行. (2)或在程序运行过程,由用户指定申请与释放. (3)设计一