场景

SpringCloud-使用路由网关统一访问接口(附代码下载):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102733039

在上面已经实现使用路由网关统一访问接口后,下面使用路由网关的服务过滤功能。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

前面使用Zuul实现路由统一网管功能。启示Zuul还有一个功能是服务过滤功能。

只需要继承ZuulFilter类并在类上添加@Component注解就可以了。

在项目包下新建filter包,包下新建类LoginFilter

package com.badao.hello.spring.cloud.zuul.filter;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import java.io.IOException;@Component
public class LoginFilter extends ZuulFilter {private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class);/*** 配置过滤类型,有四种不同生命周期的过滤器类型* 1. pre:路由之前* 2. routing:路由之时* 3. post:路由之后* 4. error:发送错误调用* @return*/@Overridepublic String filterType() {return "pre";}/*** 配置过滤的顺序* @return*/@Overridepublic int filterOrder() {return 0;}/*** 配置是否需要过滤:true/需要,false/不需要* @return*/@Overridepublic boolean shouldFilter() {return true;}/*** 过滤器的具体业务代码* @return* @throws ZuulException*/@Overridepublic Object run() throws ZuulException {//获取HttpServletRequest对象RequestContext context = RequestContext.getCurrentContext();HttpServletRequest request = context.getRequest();logger.info("{} >>> {}", request.getMethod(), request.getRequestURL().toString());//获取请求参数token--令牌String token = request.getParameter("token");if (token == null) {logger.warn("Token is empty");//s设置Zuul响应为falsecontext.setSendZuulResponse(false);//设置响应状态码为401-没有权限context.setResponseStatusCode(401);try {//向页面显示内容context.getResponse().getWriter().write("no authority");} catch (IOException e) {}} else {logger.info("OK");}return null;}
}

注:

需要重写4个方法,具体作用如下。

在具体过滤方法中,这里是判断请求时是否有token参数,没有则是没有权限。

filterType

配置过滤类型,有四种不同生命周期的过滤器类型
1. pre:路由之前
2. routing:路由之时
3. post:路由之后
4. error:发送错误调用

filterOrder

配置过滤的顺序,数值越小越靠前。

shouldFilter

配置是否需要过滤:true/需要,false/不需要。

Object run() throws ZuulException

过滤器的具体业务代码

至此整个服务体系的结构如下

我们依次启动Eureka服务、服务提供者、两个服务消费者、zuul的Application启动类

再打开浏览器输入:

http://localhost:8769/api/a/hi?message=HelloZuul

此时如果带着token参数去请求,再次打开浏览器输入:

http://localhost:8769/api/a/hi?message=HelloZuul&token=badao

SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例相关推荐

  1. SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤

    说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...

  2. SpringCloud教程- 路由网关Zuul (SpringCloud版本Greenwich.SR4)

    文章目录 Zuul简介 创建zuul-gateway工程 服务过滤 代码地址:github-spring-cloud地址 Zuul简介 Zuul是NetFlix开源的微服务网关,它可以和Eureka. ...

  3. 【微服务架构】SpringCloud之路由网关(zuul)

    什么是zuul zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用. Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zu ...

  4. springcloud 之 路由网关 zuul

    话不多说,先上图(图是丑陋了点,大家别介意哈),这幅图是我根据公司现有的业务设计出来的一个简单的基于springcloud微服务架构图. 在springcloud微服务体系中,我们一般不对外直接暴露服 ...

  5. SpringCloud之路由网关zuul(五)

    2019独角兽企业重金招聘Python工程师标准>>> 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础 ...

  6. SpringCloud 学习--路由网关

    在微服务架构中,需要几个基础的微服务,包括服务的注册与发现,服务消费,负载均衡,断路器,咋能路由,配置管理等,由这几几个基础组件相互协作,共用组建一个简单的微服务系统. -Zuul 简介 Zuul是N ...

  7. SpringCloud微服务注册调用入门-路由网关

    1 . 路由网关的介绍 路由网关(Zuul)的主要功能是路由转发和过滤器 . 路由功能是微服务的一部分 , 比如/service/user转发到到用户服务 , /service/shop转发到到商店服 ...

  8. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  9. SpringCloud之Zuul网关服务

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

最新文章

  1. 每日一皮:这真的是亲妈吗...
  2. Linux cp命令 拷贝文件
  3. python删除指定文件夹下文件和文件夹的方法
  4. UVA11825: Hackers' Crackdown (状压dp)
  5. 微电子学与计算机期刊投稿模板,微电子学与计算机投稿要求
  6. STM32学习之路-感觉自己走到了一个天大的坑里了!
  7. 光端机需要成对使用吗?
  8. C++基础教程之日期和时间
  9. Django框架rest_framework中APIView的as_view()源码解析、认证、权限、频率控制
  10. mysql 5.5 innodb 优化_mysql 5.5 -- innodb buffer pool优化
  11. office未响应(2010、2013……)崩溃
  12. Python实现图片标记分类文件夹自动归类文件的脚本
  13. 前端下载svg格式图片
  14. 使用会议管理系统的高效办会思路
  15. android开机默认打开指定程序,android 开机默认进入指定Launcher
  16. 综艺节目php灭灯_非诚勿扰php程序员 被全灭灯的是哪一期 求知道
  17. Android系统解除USER版本无法进入Recovery模式限制
  18. 人工智能学习笔记20221008
  19. [ESP32]学习笔记05
  20. 论文笔记:深度学习方法的翼型设计及性能预测代理模型

热门文章

  1. Linux安装Redis完整步骤
  2. SpringBoot操作Kafka创建Topic、Producer、Consumer
  3. python面试题_面试时全对这25道python面试题,成就了我月薪25K!附教程分享)
  4. squashfs重打包和ubi重打包
  5. Windows 全部调试符号包下载
  6. jni jvm 内存泄漏_内存泄漏
  7. adam优化器再理解
  8. fastText原理和文本分类实战
  9. linux安装hadoop记录
  10. fmt打印不显示 go_程序猿学Go: 日志系统