资讯专栏INFORMATION COLUMN

Spring Cloud 服务网关Zuul

zollero / 3187人阅读

摘要:服务网关的要素稳定性安全性性能,并发性扩展性路由过滤器核心是一系列的过滤器路由配置权限设置这个名称可以随便填敏感头过滤简洁写法不对外部访问代表集合查看所有的路由规则配置的动态注入也可以写入启动类中典型应用场景前置过滤器限流鉴权

服务网关的要素

稳定性

安全性

性能,并发性

扩展性
Spring Cloud Zuul

 - 路由+过滤器
 - 核心是一系列的过滤器
 

Zuul路由配置
management:
    security:
        enabled: false // 权限设置
zuul: 
    routes:
        # myProduct:    // 这个名称可以随便填
        #     path: /myProduct/**
        #     serviceId: product
        #     sensitiveHeader: //敏感头过滤
        # 简洁写法
        product: /myProduct/**
    ignored-patterns: 
        - /**/product/listForOrder // 不对外部访问(-代表set集合)
查看所有的路由规则:localhost:port/application/routes
{
    /myProduct/**: "product",
    /config/**: "config",
    /product/**: "product",
}
   
Zuul配置的动态注入(也可以写入启动类中)
@Compoent
public class ZuulConfig{
    @ConfigurationProperties("zuul")
    @RefreshScope
    public ZuulProperties zuulProperties(){
        return new ZuulProperties();
    }
}
典型应用场景

前置过滤器

 - 限流
 - 鉴权
 - 参数校验调整

后置过滤器

- 统计
- 日志

要想实现Filter,需要以下几个步骤:

1、继承ZuulFilter类,为了验证Filter的特性,我们这里创建3个Filter

根据用户名来过滤

package com.chhliu.springcloud.zuul;  
  
import javax.servlet.http.HttpServletRequest;  
  
import com.netflix.zuul.ZuulFilter;  
import com.netflix.zuul.context.RequestContext;  
  
public class AccessUserNameFilter extends ZuulFilter {  
    @Override  
    public Object run() {  
        RequestContext ctx = RequestContext.getCurrentContext();  
        HttpServletRequest request = ctx.getRequest();  
  
        System.out.println(String.format("%s AccessUserNameFilter request to %s", request.getMethod(), request.getRequestURL().toString()));  
  
        String username = request.getParameter("username");// 获取请求的参数  
        if(null != username && username.equals("chhliu")) {// 如果请求的参数不为空,且值为chhliu时,则通过  
            ctx.setSendZuulResponse(true);// 对该请求进行路由  
            ctx.setResponseStatusCode(200);  
            ctx.set("isSuccess", true);// 设值,让下一个Filter看到上一个Filter的状态  
            return null;  
        }else{  
            ctx.setSendZuulResponse(false);// 过滤该请求,不对其进行路由  
            ctx.setResponseStatusCode(401);// 返回错误码  
            ctx.setResponseBody("{"result":"username is not correct!"}");// 返回错误内容  
            ctx.set("isSuccess", false);  
            return null;  
        }  
    }  
  
    @Override  
    public boolean shouldFilter() {  
        return true;// 是否执行该过滤器,此处为true,说明需要过滤  
    }  
  
    @Override  
    public int filterOrder() {  
        return 0;// 优先级为0,数字越大,优先级越低  
    }  
  
    @Override  
    public String filterType() {  
        return "pre";// 前置过滤器  
    }  
} 

参考:https://www.cnblogs.com/a8457...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75084.html

相关文章

  • SpringCloud(第 022 篇)Zuul 网关服务的regexmapper属性测试, 类似

    摘要:地址可以查看该微服务网关代理了多少微服务的。微服务已启动使用提供和之间的绑定它使用正则表达式组来从提取变量然后注入到路由表达式中。 SpringCloud(第 022 篇)Zuul 网关微服务的 regexmapper 属性测试, 类似测试 zuul 的自定义路径规则一样 - 一、大致介绍 1、本章节将 Zuul 的 regexmapper 属性单独拿出来,主要是这种配置规则,可以在一...

    cyqian 评论0 收藏0
  • SpringCloud(第 020 篇)Zuul 网关模块添加 listOfServers 属性,达

    摘要:注意注解能注册到服务上,是因为该注解包含了客户端的注解,该是一个复合注解。地址可以查看该微服务网关代理了多少微服务的。 SpringCloud(第 020 篇)Zuul 网关模块添加 listOfServers 属性,达到客户端负载均衡的能力 - 一、大致介绍 1、本章节添加另外一个属性 listOfServers 来给 zuul 赋上异样的功能色彩,提供负载均衡的能力; 2、而其实说...

    Dogee 评论0 收藏0
  • Spring Cloud Zuul中使用Swagger汇总API接口文档

    摘要:代码示例本文示例读者可以通过查看下面仓库的中的三个项目如果您对这些感兴趣,欢迎收藏转发给予支持以下专题教程也许您会有兴趣基础教程基础教程 有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中?之前给大家的回复都只是简单的说了个思路,昨天正好...

    Salamander 评论0 收藏0
  • SpringCloud(第 018 篇)Zuul 服务 API 网关服务之代理与反向代理

    摘要:注意注解能注册到服务上,是因为该注解包含了客户端的注解,该是一个复合注解。地址可以查看该微服务网关代理了多少微服务的。 SpringCloud(第 018 篇)Zuul 服务 API 网关微服务之代理与反向代理 - 一、大致介绍 1、API 服务网关顾名思义就是统一入口,类似 nginx、F5 等功能一样,统一代理控制请求入口,弱化各个微服务被客户端记忆功能; 2、本章节主要讲解了使用...

    YancyYe 评论0 收藏0
  • 深入理解Spring Cloud与微服务构建【二】 - 2.2 Spring Cloud

    摘要:负载均衡组件是一个负载均衡组件,它通常和配合使用。和配合,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实例中。和配合,在消费服务时能够做到负载均衡。在默认的情况下,和相结合,能够做到负载均衡智能路由。 2.2.1 简介 Spring Cloud 是基于 Spring Boot 的。 Spring Boot 是由 Pivotal 团队提供的全新 Web 框架, 它主要的特点...

    Rocko 评论0 收藏0
  • springCloud学习4(Zuul服务路由)

    摘要:但是如果将负载均衡器置于所有服务前便不是一个好主意,会造成瓶颈。服务超时使用的和库来进行请求。支持以下四种过滤器前置过滤器在将请求发送到目的地之前被调用。通常用于记录从目标服务返回的响应处理错误或审核敏感信息。 showImg(https://segmentfault.com/img/remote/1460000019531578); springcloud 总集:https://ww...

    wuaiqiu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<