3.Zuul-过滤器
1.什么是Zuul?
路由+过滤器=Zuul,核心是一系列的过滤器
2.Zuul的过滤器:

pre:可以在请求被路由之前调用route:在路由请求时候被调用post:在route和error过滤器之后被调用error:处理请求时发生错误时被调用
3.生命周期

流程:请求首先到达pre类型的过滤器(前置过滤器,一般做参数校验、限流、鉴权),接下来是routing类过滤器(将外部请求转发到Origin Server上去),然后是post类过滤器(可以在这里做响应数据的加工、统计、日志)
整个生命周期中出现异常,将走error类过滤器。
application.yml:
zuul:
routes:
xxx-service: /fajun/** #fajun/开头的请求前缀都会路由到xxx-service服务上
host: #url路由形式时有效
connect-timeout-millis: 10000
socket-timeout-millis: 10000
retryable: false #是否开启重试机制
sensitive-headers: #敏感头不过滤,例如:cookie、set-cookie
#禁用/**/bbb请求路由
#ignored-patterns:
#- /**/bbb
#设置查看路由规则的权限
management:
security:
enabled: false
过滤器demo(通过继承ZuulFilter然后覆写4个方法):
package com.wangfajun.filter; import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpStatus;
import javax.servlet.http.HttpServletRequest;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE; public class TokenFilter extends ZuulFilter {
//filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型
@Override
public String filterType() {
return PRE_TYPE;
}
//filterOrder:通过int值来定义过滤器的执行顺序(数字越小,越靠前执行)
@Override
public int filterOrder() {
return PRE_DECORATION_FILTER_ORDER-1;
}
//shouldFilter:返回一个boolean类型来判断该过滤器是否要执行,所以通过此函数可实现过滤器的开关。在上例中,我们直接返回true,所以该过滤器总是生效
@Override
public boolean shouldFilter() {
return true;
} @Override
public Object run() throws ZuulException {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
String token = request.getParameter("token");
if(StringUtils.isEmpty(token)){
requestContext.setSendZuulResponse(false);//不通过
requestContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);//设置权限不足状态码
requestContext.setResponseBody("xxxx");
}
return null;
}
}
启动类:
package com.wangfajun; import com.wangfajun.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; @SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy //开启Zuul代理
public class ApiGetwayApplication { public static void main(String[] args) {
SpringApplication.run(ApiGetwayApplication.class, args);
} @Bean
public TokenFilter tokenFilter() {
return new TokenFilter();
}
}
pom:
<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>
</dependencies>
3.Zuul-过滤器的更多相关文章
- spring cloud 容错之zuul回退和Zuul过滤器
一.容错:Zuul回退 如果微服务下线了,针对每个微服务,都需要回复一个中文提示,而不是报异常 1.新建ConsumerFallbackProvider.java package com.pupeiy ...
- Zuul过滤器
1.Zuul过滤器生命周期Zuul大部分功能都是通过过滤器来实现的,Zuul定义了4种标准的过滤器类型,这些过滤器类型对应于请求的典型生命周期.a.pre: 这种过滤器在请求被路由之前调用.可利用这种 ...
- 0606-Zuul构建API Gateway-Zuul过滤器以及禁用Zuul过滤器
一.概述 针对Spring Cloud的Zuul配备了许多在代理和服务器模式下默认启用的ZuulFilter bean. 有关启用的可能过滤器,请参阅zuul过滤器包. 二.Zuul过滤器使用 2.1 ...
- SpringCloud之Zuul过滤器实现登录鉴权实战(十一)
自定义zuul过滤器实现登录鉴权实战 1.新建filter包 2.新建类继承ZuulFilter,重写方法 3.在类顶部加注解@Comment让spring扫描 /** * @author WGR * ...
- 使用网关zuul过滤器登录鉴权
使用网关zuul过滤器登录鉴权 1.新建一个filter包 filte有很多种 pre.post. 2.新建一个类LoginFilter,实现ZuulFilter,重写 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_6-04 自定义Zuul过滤器实现登录
笔记 4.自定义Zuul过滤器实现登录鉴权实战 简介:自定义Zuul过滤器实现登录鉴权实战 1.新建一个filter包 2.新建一个类,实现ZuulFilter,重写里面的方法 3.在类顶部加 ...
- Spring Cloud(七):服务网关zuul过滤器
上文介绍了Zuul的基本使用与路由功能,本文接着介绍Zuul的核心概念 -- Zuul过滤器(filter). Zuul的功能基本通过Zuul过滤器来实现(类比于Struts的拦截器,只是Struts ...
- SpringCloud入门(八): Zuul 过滤器详解
Zuul 过滤器 zuul 有四种过滤器类型,分别是: 1.Pre:过滤器在请求被路由之前调用.我们可利用这种过滤器实现身份验证.在集群中选择请求的微服务.记录调试信息等: 2.Routing:过滤器 ...
- zuul过滤器filter 的编写
通过上一节(zuul的各种配置)的学习,我们学会了zuul路由的各种配置,这一节我们来实现一下zuul的过滤器功能.那么为什么需要用到zuul的过滤器呢?我们知道zuul是我们实现外部系统统一访问的入 ...
- Spring Cloud内置的Zuul过滤器详解
Spring Cloud默认为Zuul编写并启用了一些过滤器,这些过滤器有什么作用呢?我们不妨按照@EnableZuulServer.@EnableZuulProxy两个注解进行展开,相信大家对这两个 ...
随机推荐
- 配置Robot Framework 环境时如何查看wxPython是否成功安装
配置Robot Framework,win10系统,安装版本分别如下:
- nagios 监控内存使用情况
监控本机内存cd /usr/lib64/nagios/pluginstouch check_mem.sh #!/bin/bash " ]; then memTotal_b=`free -b ...
- Hdoj 1392.Surround the Trees 题解
Problem Description There are a lot of trees in an area. A peasant wants to buy a rope to surround a ...
- Poj 1659.Frogs' Neighborhood 题解
Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和 ...
- Nifi 模板
Acqusition_and_Processing.xml Moving templates to own directory to make repo cleaner CADF_Pars ...
- Nginx+Keepalived部署
-----------ReProxy-------------------------Client-----------192.168.56.200 nginx+keepalived 192.168. ...
- LCOW —— 单一Docker引擎下可同时运行Linux和Windows容器啦!
https://blog.csdn.net/m2l0zgssvc7r69efdtj/article/details/79251059 就在上周,Docker官方的master分支上新增了LCOW(Li ...
- iView 的分页结合表格用法
HTML: <Table border stripe ref="selection" :columns="columns" :data="now ...
- LOJ#3023 老C的键盘
给定树,每条边有个大于号或者小于号,表示两个节点编号的大小关系.问有多少种树满足条件.n <= 100 解:树形DP. 设fij表示以i为根的子树中i是第j小的.转移的时候要乘上两个组合数. # ...
- 【CH6801】棋盘覆盖
题目大意:给定一个 N*N 的棋盘,棋盘上有些位置不能防止任何东西,现用 1*2 的骨牌填充棋盘,问最多能铺多少块骨牌. 题解:由于骨牌只能覆盖相邻的两个格子,那么按照对角线进行划分的格子可以保证一定 ...