springcloud中网关zuul的过滤器zuulFilter的使用
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的使用相关推荐
- SpringCloud 服务网关 Zuul 自定义路由和排除路由配置
前言 首先需要说明的是该文是 [带你入门SpringCloud 之 服务网关 Zuul ]的拓展篇,如果还未阅读 [带你入门SpringCloud 之 服务网关 Zuul ]请先阅读完毕后在阅读该文. ...
- SpringCloud: 路由网关(zuul)
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...
- springcloud之网关zuul学习笔记
是什么? 能干吗? 路由和网关 开始 新建工程导入jar 配置yml 禁用不通过zuul的访问方式,我们的目的时要想访问先经过zuul,而不能直接访问.真是开发这里配置的*,表示禁止所有,具体看下一张 ...
- springcloud 服务网关Zuul实战(一)基本路由配置
上篇我们介绍了zuul是什么?大家已经有些了解,废话不多说我们就开始实际代码演示下zuul如何配置 一,新建一个路由网关的微服务 microservicecloud-zuul-gateway-9527 ...
- springcloud 中的zuul整合Elasticsearch报错availableProcessors is already set to [4], rejecting [4]...
今天使用springboot整合springcloud zuul和elasticsearch时,报错. 仅仅使用springboot和elasticsearch没有问题,springboot和eure ...
- springcloud 服务网关Zuul实战(二)路由访问映射规则
上篇文中已经讲完基本的路由配置,但是我们如何对访问的微服务做映射 访问的地址:http://myzuul.com:9527/microservicecloud-dept/dept/get/2 从访问地 ...
- properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!...
本文同步Java知音社区,专注于Java 作者:kosamino http://www.cnblogs.com/jing99/p/11696192.html Zuul是spring cloud中的微服 ...
- 非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!
作者:kosamino www.cnblogs.com/jing99/p/11696192.html Zuul是spring cloud中的微服务网关.网关:是一个网络整体系统中的前置门户入口.请求首 ...
- properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了! - 风平浪静如码
Zuul是spring cloud中的微服务网关.网关:是一个网络整体系统中的前置门户入口.请求首先通过网关,进行路径的路由,定位到具体的服务节点上. Zuul是一个微服务网关,首先是一个微服务.也是 ...
最新文章
- 对于flat_interface与public_interface的理解
- mvc3中正确处理ajax访问需要登录的页面
- Qt 5.12 LTS(长期维护版本)中Qt Quick的性能改进
- Nginx的安全控制及SSL加密介绍
- 常用函数式接口之Consumer
- Linux概述及centos版本介绍和下载地址
- php自动加载原理,php中的自动加载类机制原理
- 支付宝上线“时间银行”:未来养老不用愁了
- 关于如何调用Datalist里面的Datalist
- Oracle RAC Brain Split Resolution
- firefox无法打开php,php – CORS无法在Firefox中运行
- VB中PictureBox控件使用教程
- 微软发布TypeScript用以改进JavaScript开发
- 《Android框架揭秘》——1.1节Android源代码组成
- 身份证前六位对应代码
- 移动硬盘上安装WIN7 WIN10 UBUNTU系统
- python hist2d_matplotlib可视化之hist直方图
- 编程java好学吗,java初级编程好学吗
- 平板用电容笔还是触控笔?双十一值得买电容笔推荐
- 罗永浩放话要当带货一哥,意思是要超越李佳琦了?