1 介绍

Filter 的生命周期有 4 个,分别是
  “PRE(前置过滤器)”:该类型的filters在Request routing到源web-service之前执行。用来实现Authentication、选择源服务地址等;
  “ROUTING(路由选择)”:该类型的filters用于把Request routing到源web-service,源web-service是实现业务逻辑的服务。这里使用HttpClient请求web-service;
  “POST(后置过滤器)” :该类型的filters在ROUTING返回Response后执行。用来实现对Response结果进行修改,收集统计数据以及把Response传输会客户端。
  “ERROR(错误过滤器)”:上面三个过程中任何一个出现错误都交由ERROR类型的filters进行处理。

2 配置

  在微服务前面放一层网关,作用是将微服务的有关信息(比如端口)给包裹起来,不让用户直接看到,同时网关zuul还可以进行一些负载均衡的操作。
1、需求说明
  在网关zuul进行微服务网址转发之前,判断用户是否登录。
2、配置注册中心Eureka
3、配置网关zuul
  项目结构

(1)pom依赖

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency>

(2)配置application.yml

server:port: 8080
spring:application:name: service-zuulzuul:routes:mydept:path: /mydept/**serviceId: http-testignored-services: "*"eureka:client:service-url:defaultZone: http://127.0.0.1:8000/eureka/instance:instance-id: myzuul.comprefer-ip-address: true

(3)zuulFilter类

package com.xiaolun.config;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;@Component
public class ZuulFilterTest extends ZuulFilter {//filter的类型,前置pre,后置post@Overridepublic String filterType() {return FilterConstants.PRE_TYPE;}//filter的执行顺序,值越小,越先执行@Overridepublic int filterOrder() {return 1;}//判断请求是否需要过滤@Overridepublic boolean shouldFilter() {System.out.println("---------进入shouldFilter----------");//举例:目标:订单服务需要过滤。当是商品服务,不需要过滤RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();if (request.getRequestURI().contains("zuulTT")) { //含有zuulTT需要过滤,当路径中只有部分匹配时,也要进行过滤return true;}return false;}//请求过滤的规则@Overridepublic Object run() {System.out.println("---------进入run方法---------------");RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();String token = request.getParameter("token");System.out.println("token= "+ token);if (! StringUtils.isEmpty(token)) {return null;}if (StringUtils.isEmpty(token)) { //没有携带token,不允许访问ctx.setSendZuulResponse(false);//后台会接收到401未授权代码ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());//这里一定要加要给Response设置CharacterEncoding编码为UTF-8ctx.getResponse().setContentType("text/html;charset=UTF-8");ctx.setResponseBody("{\"result\":\"请您先登陆\"}");// 返回错误内容(json格式返回)}return null;}
}

(4)主启动类

package com.xiaolun;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuulMain8080 {public static void main(String[] args) {SpringApplication.run(ZuulMain8080.class, args);}
}

4、测试类
(1)pom依赖

   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--监控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency>

(2)配置application.yml

server:port: 7000spring:application:name: http-test
eureka:client:register-with-eureka: true #将自己入驻进eurekaservice-url:defaultZone:  http://localhost:8000/eureka

(3)业务类-controller

package com.xiaolun.zuulTest;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class ZuulHello {@RequestMapping("zuulTest02")@ResponseBodypublic String zuulTest02() {return "hello zuul02";}
}

(4)主启动类

package com.xiaolun;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class HttpTestMain7000 {public static void main(String[] args) {SpringApplication.run(HttpTestMain7000.class, args);}
}

5、测试
  依次启动Eureka,zuul和测试类,输入下面的网址:

#http://zuul注册进Eureka的instance-id名:zuul启动的端口号/微服务名称(这里不启用)/路由转发/controller网址
http://myzuul.com:8080/mydept/zuulTest02

可以正常访问:

当我们的网址中含有zuulTT字段时(类zuulTT也算),就会被网关zuul过滤器进行过滤,我们需要在网址中增加token字段,比如:

http://myzuul.com:8080/mydept/zuulTT?token=100

否则会报错,进而弹出下面的界面:

{"result":"请您先登陆"}

springcloud中网关zuul的过滤器zuulFilter的使用相关推荐

  1. SpringCloud 服务网关 Zuul 自定义路由和排除路由配置

    前言 首先需要说明的是该文是 [带你入门SpringCloud 之 服务网关 Zuul ]的拓展篇,如果还未阅读 [带你入门SpringCloud 之 服务网关 Zuul ]请先阅读完毕后在阅读该文. ...

  2. SpringCloud: 路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

  3. springcloud之网关zuul学习笔记

    是什么? 能干吗? 路由和网关 开始 新建工程导入jar 配置yml 禁用不通过zuul的访问方式,我们的目的时要想访问先经过zuul,而不能直接访问.真是开发这里配置的*,表示禁止所有,具体看下一张 ...

  4. springcloud 服务网关Zuul实战(一)基本路由配置

    上篇我们介绍了zuul是什么?大家已经有些了解,废话不多说我们就开始实际代码演示下zuul如何配置 一,新建一个路由网关的微服务 microservicecloud-zuul-gateway-9527 ...

  5. springcloud 中的zuul整合Elasticsearch报错availableProcessors is already set to [4], rejecting [4]...

    今天使用springboot整合springcloud zuul和elasticsearch时,报错. 仅仅使用springboot和elasticsearch没有问题,springboot和eure ...

  6. springcloud 服务网关Zuul实战(二)路由访问映射规则

    上篇文中已经讲完基本的路由配置,但是我们如何对访问的微服务做映射 访问的地址:http://myzuul.com:9527/microservicecloud-dept/dept/get/2 从访问地 ...

  7. properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!...

    本文同步Java知音社区,专注于Java 作者:kosamino http://www.cnblogs.com/jing99/p/11696192.html Zuul是spring cloud中的微服 ...

  8. 非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!

    作者:kosamino www.cnblogs.com/jing99/p/11696192.html Zuul是spring cloud中的微服务网关.网关:是一个网络整体系统中的前置门户入口.请求首 ...

  9. properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了! - 风平浪静如码

    Zuul是spring cloud中的微服务网关.网关:是一个网络整体系统中的前置门户入口.请求首先通过网关,进行路径的路由,定位到具体的服务节点上. Zuul是一个微服务网关,首先是一个微服务.也是 ...

最新文章

  1. 对于flat_interface与public_interface的理解
  2. mvc3中正确处理ajax访问需要登录的页面
  3. Qt 5.12 LTS(长期维护版本)中Qt Quick的性能改进
  4. Nginx的安全控制及SSL加密介绍
  5. 常用函数式接口之Consumer
  6. Linux概述及centos版本介绍和下载地址
  7. php自动加载原理,php中的自动加载类机制原理
  8. 支付宝上线“时间银行”:未来养老不用愁了
  9. 关于如何调用Datalist里面的Datalist
  10. Oracle RAC Brain Split Resolution
  11. firefox无法打开php,php – CORS无法在Firefox中运行
  12. VB中PictureBox控件使用教程
  13. 微软发布TypeScript用以改进JavaScript开发
  14. 《Android框架揭秘》——1.1节Android源代码组成
  15. 身份证前六位对应代码
  16. 移动硬盘上安装WIN7 WIN10 UBUNTU系统
  17. python hist2d_matplotlib可视化之hist直方图
  18. 编程java好学吗,java初级编程好学吗
  19. 平板用电容笔还是触控笔?双十一值得买电容笔推荐
  20. 罗永浩放话要当带货一哥,意思是要超越李佳琦了?

热门文章

  1. 首旅如家升级会员卡,推出喜茶、奈雪、麦当劳等品牌优惠权益
  2. 2023特种作业熔化焊接与热切割模拟一[安考星]
  3. OPPO Reno发布:2999元起,侧旋升降+10倍混合光变
  4. 《编译原理之美》结课了
  5. [C++] unordered_map排序
  6. 手机怎么开启地震预警功能?
  7. matplotlib.pyplot使用汇总
  8. 攻防世界 - MISC - 07 - 坚持60s
  9. Electron理论知识 6 - asar使用技巧
  10. win10 系统打开的软件太小,如何变大(亲测有效)