搭建简单Zuul网关 , ZuulFilter过滤器使用说明

本文介绍微服务架构下网关的重要性和Zuul的配置与使用,包括网关概念、作用、与过滤器的区别,以及Nginx与Zuul的对比。详细步骤覆盖Zuul的环境搭建、配置、过滤器实现与测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目地址: 链接:https://pan.baidu.com/s/1Mxo0ltvZbpz_r8mCU-mSpw 
提取码:3j4a 

1.问题答疑:

网关API(接口) Gateway(网关) ---接口网关注意: 接口没有界面
   1.网关概念:相当于客户端请求统一先请求到网关服务器上,在由网关服务器进行转发到实际服务地址上,类似Nginx
   2.网关作用:网关可以拦截客户端所有请求,对该请求进行权限控制,负载均衡,日志管理,接口调用监控等
   3.网关和过滤器区别是什么?
        网关是拦截整个微服务所有请求, 过滤器是拦截单个tomcat服务器请求
   4.Nginx与Zuul区别?
        相同点: Nginx和Zuul都可以实现负载均衡,反向代理,过滤请求,实现网关效果.
        不同点: Nginx采用C语言编写,Zuul采用java语言编写. Zuul负载均衡实现:采用ribbon+eureka实现本地负载均衡
                     Nginx负载均衡实现:采用服务器端实现负载均衡.Nginx比Zuul功能会更加强大,因为Nginx整合一些脚本语言                                        (Nginx+Lua)     可以实现一些其他功能.
                     Nginx适合于服务器负载均衡 + 也可以实现网关. Zuul适合微服务中实现网关,而且使用技术是java语言
                     Nginx作用实现反向代理,Zuul对微服务实现网关拦截. 标配最好Nginx+Zuul实现网关.  
   5.接口什么背景下产生?  在面向服务架构和微服务背景下产生,目的都是为了解耦,RPC远程调用中产生
   6.接口如何分类?
       开放接口:其他机构合作伙伴进行调用(必须在外网访问) 蚂蚁开放平台 ,微信公众号开发
                       需要通过appid+appsocet生成accessToken进行通讯.对接支付开发,微信开发,目的可以
                       授权一些接口权限OAuth2.0协议方式 如:第三方联合登录
       内部接口:一般只能在局域网中进行访问,服务与服务调用之间关系都在同一个微服务系统中,目的是为了
                       保证安全问题 
设计一套公司项目的接口,你会如何设计?
    接口权限(开放接口(遵循OAuth2.0协议)|内部接口),考虑幂等性,安全性(Https) 防止篡改数据(验证签名),
    使用网关拦截接口实现黑名单和白名单 , 接口使用http协议+json格式restful风格目的为了跨平台.
    考虑高并发 对接口服务实现保护.服务降级熔断隔离等.最后使用API统一管理平台 Swagger UI

2.搭建Zuul网关

1.添加pom.xml依赖

        <!--SpringBoot整合WEB组件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBoot整合Eureka客户端组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--SpringCloud整合 zuul网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

2.添加配置文件application.properties

#指定运行端口
server.port=80
#服务名称
spring.application.name=zuul-gateway
#配置注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/


#zuul网关配置  start
#当客户端发送请求127.0.0.1:80/api-member开头的,都会转发到会员服务
zuul.routes.api-member.path=/api-member/**
#服务别名  zuul网关默认整合ribbon 自动实现负载均衡轮询效果
zuul.routes.api-member.service-id=member

#当客户端发送请求127.0.0.1:80/api-order开头的,都会转发到订单服务
zuul.routes.api-b.path=/api-order/**
#服务别名
zuul.routes.api-b.service-id=order
#zuul网关配置  end

3.配置启动类

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy   //开启zuul 网关
public class AppGateWay {
    public static void main(String[] args) {
        SpringApplication.run(AppGateWay.class,args);
    }
}

4,访问测试

5,添加Zuul过滤器

@Component
public class TokenFilter1 extends ZuulFilter {

    //过滤类型
    //pre:在请求被路由(转发)之前调用
    //route:在路由(请求)转发时被调用
    //error:服务网关发生异常时被调用
    //post:在路由(转发)请求后调用
    @Override
    public String filterType() {
        return "pre";
    }

    //过滤器执行顺序,当一个请求在同一个阶段的时候存在多个过滤器的时候,多个过滤器执行顺序
    @Override
    public int filterOrder() {
        return 0;
    }

    //判断过滤器是否生效
    @Override
    public boolean shouldFilter() {
        return true;
    }

    //编写过滤器拦截业务逻辑代码
    @Override
    public Object run() throws ZuulException {
        //案例:拦截所有的服务接口,判断服务接口上是否有传递userToken参数
        //1.获取上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        // 2.获取request对象
        HttpServletRequest request = currentContext.getRequest();
        // 3.获取token的时候从请求头中过去 ,此处测试,直接获取url上值
        //String userToken = request.getHeader("userToken");
        String userToken = request.getParameter("userToken");
        if(StringUtils.isEmpty(userToken)){
            //不会继续执行...不会去调用服务接口,网关服务直接响应给客户端
            currentContext.setSendZuulResponse(false);
            //返回一个错误提示
            currentContext.setResponseBody("userToken is null");
            currentContext.setResponseStatusCode(401);
            return null;
        }
        //正常执行调用其他服务接口.....
        return null;
    }
}

6.测试过滤器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值