`
chengpeng_2015
  • 浏览: 7332 次
社区版块
存档分类
最新评论

SpringCloud服务网关zuul(五)

阅读更多

1.基础服务代理使用

1.1新建gateway项目,pom文件如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.4.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>net.chengp</groupId>
  12. <artifactId>gateway</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>gateway</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.cloud</groupId>
  23. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.cloud</groupId>
  27. <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-test</artifactId>
  32. <scope>test</scope>
  33. </dependency>
  34. </dependencies>
  35. <dependencyManagement>
  36. <dependencies>
  37. <dependency>
  38. <groupId>org.springframework.cloud</groupId>
  39. <artifactId>spring-cloud-dependencies</artifactId>
  40. <version>${spring-cloud.version}</version>
  41. <type>pom</type>
  42. <scope>import</scope>
  43. </dependency>
  44. </dependencies>
  45. </dependencyManagement>
  46. <build>
  47. <plugins>
  48. <plugin>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-maven-plugin</artifactId>
  51. </plugin>
  52. </plugins>
  53. </build>
  54. </project>

1.2启动类开启zuul代理

  1. @EnableZuulProxy

1.3启动测试

依次启动注册中心、provider、consumer以及新建的gateway项目,通过gateway访问consumer测试 
http://127.0.0.1:40010/consumer/testHystrix

2.自定义路由规则

2.1修改配置文件指定路由规则

  1. #转发规则
  2. zuul:
  3. #忽略所有服务直接访问
  4. ignored-services: '*'
  5. #路由设置:服务名对应请求路径,注意路由路径不能相同,否则会被覆盖
  6. routes:
  7. provider: /gateway/provider/**
  8. consumer: /gateway/consumer/**

2.2重启访问

通过两次访问我们可以看到忽略规则以及转发规则都生效了

3.使用zuul做登录拦截及认证

3.1添加登录拦截类

  1. package net.chengp.gateway.filters;
  2. import javax.servlet.http.HttpServletRequest;
  3. import org.apache.commons.lang.StringUtils;
  4. import org.apache.http.HttpStatus;
  5. import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
  6. import org.springframework.stereotype.Component;
  7. import com.netflix.zuul.ZuulFilter;
  8. import com.netflix.zuul.context.RequestContext;
  9. import com.netflix.zuul.exception.ZuulException;
  10. /**
  11. * 登录拦截
  12. *
  13. */
  14. @Component
  15. public class LoginFilter extends ZuulFilter {
  16. @Override
  17. public boolean shouldFilter(){
  18. //ACL 访问控制列表
  19. RequestContext ctx = RequestContext.getCurrentContext();
  20. HttpServletRequest request = ctx.getRequest();
  21. System.out.println("请求地址:"+request.getRequestURI());
  22. if(request.getRequestURI().isEmpty() || !request.getRequestURI().startsWith("/gateway/login/")){
  23. //请求地址为空或者不是login服务下面的地址就进行拦截
  24. return true;
  25. }else {
  26. return false;
  27. }
  28. }
  29. @Override
  30. public Object run() throws ZuulException {
  31. //这里执行被拦截请求的业务逻辑,可使用JWT进行认证 json web token
  32. RequestContext ctx = RequestContext.getCurrentContext();
  33. HttpServletRequest request = ctx.getRequest();
  34. String token = request.getHeader("token");
  35. // token为空则在请求参数中拿
  36. if(StringUtils.isBlank(token)){
  37. token = request.getParameter("token");
  38. }
  39. if(StringUtils.isBlank(token)){
  40. ctx.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);//设置为401未认证
  41. ctx.setSendZuulResponse(false);
  42. }
  43. return null;
  44. }
  45. @Override
  46. public String filterType(){
  47. /**
  48. * PRE_TYPE 前置
  49. * POST_TYPE 后置
  50. * ROUTE_TYPE 执行路由
  51. * ERROR_TYPE 异常
  52. */
  53. return FilterConstants.PRE_TYPE;
  54. }
  55. @Override
  56. public int filterOrder(){
  57. //放在解码前执行
  58. return FilterConstants.PRE_DECORATION_FILTER_ORDER;
  59. }
  60. }

3.2重启测试

带上token后可正常访问

4.使用zuul做服务限流

4.1添加服务限流拦截类

  1. package net.chengp.gateway.filters;
  2. import org.apache.http.HttpStatus;
  3. import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
  4. import org.springframework.stereotype.Component;
  5. import com.google.common.util.concurrent.RateLimiter;
  6. import com.netflix.zuul.ZuulFilter;
  7. import com.netflix.zuul.context.RequestContext;
  8. import com.netflix.zuul.exception.ZuulException;
  9. @Component
  10. public class RateLimitFilter extends ZuulFilter{
  11. private static final RateLimiter rateLimit = RateLimiter.create(1);//多实例下该值需要除以实例数
  12. @Override
  13. public boolean shouldFilter(){
  14. //这里可以引入ACL
  15. return true;
  16. }
  17. @Override
  18. public Object run() throws ZuulException {
  19. if(!rateLimit.tryAcquire()){//没拿到令牌就不继续执行
  20. RequestContext.getCurrentContext().setSendZuulResponse(false);
  21. RequestContext.getCurrentContext().setResponseStatusCode(HttpStatus.SC_BAD_REQUEST);
  22. }
  23. return null;
  24. }
  25. @Override
  26. public String filterType(){
  27. return FilterConstants.PRE_TYPE;
  28. }
  29. @Override
  30. public int filterOrder(){
  31. return -4;//最先执行
  32. }
  33. }

4.2重启测试

尝试快速刷新页面访问则返回400

分享到:
评论

相关推荐

    05_SpringCloud API网关zuul.md

    SpringCloud API网关zuul ,路由规则写在配置文件中。为了便于修改,把配置文件放到配置文件中心。使用springcloud config .后期可以使用携程的阿波罗 可视化操作界面 并且是中文的。

    springcloud zuul网关服务

    SpringCloud Zuul是基于Spring Cloud框架的一个核心组件,它扮演着API网关的角色,负责路由转发、过滤器处理以及安全控制等任务。Zuul的主要功能包括动态路由、过滤器机制、安全控制、负载均衡、健康检查等。下面将...

    springcloud zuul gateway 服务网关

    SpringCloud Zuul Gateway 服务网关是Spring Cloud生态系统中的一个重要组件,它主要负责微服务架构中的路由转发和过滤器功能。Zuul是Netflix开源的一个边缘服务,而Gateway则是Spring Cloud针对Zuul进行的升级版,...

    Spring Cloud 服务网关Zuul的实现

    Spring Cloud 服务网关Zuul的实现 Spring Cloud 服务网关Zuul是Netflix开源的API网关组件,用于管理和路由API流量。Zuul提供了灵活的路由、过滤和安全机制,帮助开发者快速构建高性能、高可用性的API网关。 服务...

    springcloud入门代码基于Spring Cloud实现的服务网关Zuul源代码

    springcloud入门代码基于Spring Cloud实现的服务网关Zuul源代码 安装教程 Zuul pom.xml &lt;groupId&gt;org.springframework.cloud &lt;artifactId&gt;spring-cloud-starter-netflix-zuul application.yml server:...

    spring cloud 使用Zuul 实现API网关服务问题

    Spring Cloud 使用 Zuul 实现 API 网关服务问题 在本文中,我们将主要介绍如何使用 Spring Cloud 的 Zuul 组件来实现 API 网关服务问题。 Zuul 是一个基于 Netflix Zuul 的 API 网关组件,它可以解决路由规则和服务...

    springcloud zuul 网关实现源码

    springcloud zuul 网关开发实践,模拟了在Spring Cloud微服务系统中,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服的实现过程。

    spring cloud oauth2 zuul 单点登录 认证授权

    **Zuul** 是Spring Cloud的一部分,作为一个边缘服务,它充当了微服务架构的入口网关。Zuul的主要功能包括路由转发、过滤器处理、负载均衡、熔断和限流等。在单点登录场景中,Zuul可以拦截所有请求,检查请求是否...

    SpringCloud中集成Zuul网关.html

    SpringCloud中集成Zuul网关。 添加相关依赖,编写路由地址,添加过滤器可以在过滤器中对请求做其他操作 如验证是否登录、解密请求中的数据等

    SpringCloud eureka mybatis zuul feign

    综上所述,这个项目利用SpringCloud的组件构建了一个具备服务发现、动态路由、负载均衡的微服务系统,通过Eureka管理服务注册,Zuul处理外部请求的路由,Feign简化了服务间调用,共同构建出高效、可扩展的微服务架构...

    spring-cloud-zuul(包含注册中心、服务生产者、服务消费者、zuul网关路由).zip

    SpringCloud-2.0-service-zuul-80 代表了Zuul服务网关,它是所有微服务请求的统一入口。Zuul的主要职责有: 1. 路由转发:根据请求路径将请求转发到对应的服务提供者,实现服务间的解耦。 2. 访问过滤:Zuul提供了...

    SpringCloud zuul jar包

    SpringCloud Zuul是Spring Cloud生态系统中的一个边缘服务和API网关组件。它的主要功能是作为微服务架构中的统一入口,负责路由转发、过滤器处理、负载均衡以及安全控制等任务。Zuul允许开发者在微服务架构中实现...

    SpringCloud网关组件zuul实例解析

    SpringCloud 网关组件 Zuul 实例解析 SpringCloud 网关组件 Zuul 是一个基于 Netflix 的 Zuul 项目,提供了动态路由、监控、安全、有限流控等功能。 Zuul 实例解析是 SpringCloud 网关组件 Zuul 的一个重要组件,它...

    第六章 SpringCloud Zuul网关.pdf

    Spring Cloud Zuul网关 Spring Cloud Zuul网关是微服务架构中的一种网关解决方案,主要用于解决微服务之间的调用和路由问题。在本章节中,我们将了解Zuul网关的基本概念和使用方法,以及如何将其应用于微服务架构...

    SpringCloud Zuul网关功能实现解析

    SpringCloud Zuul网关功能实现解析 SpringCloud Zuul网关功能实现解析是基于 SpringCloud 生态系统的微服务架构中的一种网关解决方案。 Zuul 是 Netflix 公司开源的一个基于 Java 的 API Gateway 项目,旨在提供一...

    22-Spring Cloud网关Zuul&过滤器&集群方案1

    Spring Cloud网关Zuul是微服务架构中常用的边缘服务组件,用于提供路由、过滤等功能,实现对API的集中式管理。Zuul的主要优点在于能够统一处理跨服务的公共逻辑,如认证、限流、监控等,减轻了每个微服务自身的负担...

    SpringCloud之六 路由网关zuul

    在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡器(如Zuul、Nginx),然后到达服务网关(Zuul集群),最终路由到具体的服务实例。服务实例统一注册到高可用的服务注册中心...

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

    在给定的压缩包文件中,`EureKaserver` 可能是关于Eureka服务发现的配置或示例,`SpringCloud-Service` 可能包含了一个或多个微服务实例,而`SpringCloud-Zuul` 很可能包含了Zuul 网关的配置和服务。通过这些组件的...

    SpringCloud(zuul路由网关)

    在SpringCloud生态中,Zuul是一个重要的组件,它作为边缘服务或者说是API网关,承担着路由转发和过滤器的角色。下面将详细阐述Zuul在SpringCloud中的应用及其关键知识点。 1. **Zuul的基本概念** Zuul是由Netflix...

Global site tag (gtag.js) - Google Analytics