SpringCloud之zuul网关搭建+路由配置+过滤配置

转载请标明出处:https://blog.csdn.net/men_ma/article/details/106847165.
本文出自 不怕报错 就怕不报错的小猿猿 的博客

SpringCloud之zuul网关搭建+路由配置+过滤配置

  • 目标
  • 1.Zuul路由网关简介及基本使用
  • 2.Zuul路由映射配置
  • 3.Zuul请求过滤配置

目标

1、Zuul路由网关简介及基本使用
2、Zuul路由映射配置
3、Zuul请求过滤配置

1.Zuul路由网关简介及基本使用

  1. 简介:

Zuul API路由网关服务简介
在这里插入图片描述

  1. loT、mobile、browser(代表客户端)
  2. API Gateway(代表网关)
  3. 三个microservice(代表内部注册中心,例如:分别代表订单,支付,短信,实现这些功能都要先登录才能实现,所以网关在这里起到一个安全作用)

看上图,这里的API 路由网关服务 由Zuul实现,主要就是对外提供服务接口的时候,起到了请求的路由和过滤作用,也因此能够隐藏内部服务的接口细节,从来有利于保护系统的安全性;
总之一句话微服务中的生产者与消费者都是相对的,没有绝对的概念

  1. 路由配置
    Zuul 路由配置
    我们新建一个module
    microservice-zuul-3001
    这里我们的zuul也注册到eureka服务里,端口3001;
    我们修改下Hosts,专门为zuul搞个本地域名映射
    hosts文件 加下:
127.0.0.1  zuul.xiaoqing.com

在这里插入图片描述
在这里插入图片描述

然后pom.xml要加上:

<!--zuul网关-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>

完整pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.xiaoqing</groupId><artifactId>t243microservice</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>microservice-zuul-3001</artifactId><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>com.javaxl</groupId><artifactId>microservice-common</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><!-- actuator监控 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- hystrix容错 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><!--zuul网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

搞一个 application.yml :

server:port: 3001context-path: /
spring:application:name: microservice-zuul
eureka:instance:instance-id: microservice-zuul:3001prefer-ip-address: trueclient:service-url:defaultZone: http://eureka2001.javaxl.com:2001/eureka/,http://eureka2002.javaxl.com:2002/eureka/,http://eureka2003.javaxl.com:2003/eureka/zuul:routes:studentServer.serviceId: microservice-studentstudentServer.path: /studentServer/**ignored-services: "*"prefix: /xiaoqinginfo:groupId: com.javaxl.testSpringcloudartifactId: microservice-zuul-3001version: 1.0-SNAPSHOTuserName: http://javaxl.comphone: 123456

启动类:MicroserviceZuul3001Application
加下@EnableZuulProxy注解

package com.xiaoqing.microservicezuul3001;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@EnableZuulProxy
public class MicroserviceZuul3001Application {public static void main(String[] args) {SpringApplication.run(MicroserviceZuul3001Application.class, args);}}

我们先配置下:
在这里插入图片描述

我们测试下:

启动三个eureka (2001,2002,2003)然后再启动下一个1004,1005,1006服务,以及 zuul 3001网关服务和feign 80服务;

注册中心测试结果;
在这里插入图片描述
网关服务测试结果;
在这里插入图片描述

这里有两个服务;

我们用 http://zuul.javaxl.com:3001/microservice-student/student/hystrix 域名+端口+服务名称+请求地址 也能请求到数据;
在这里插入图片描述
我们直接请求:http://zuul.javaxl.com:3001/microservice-student/student/hystrix 能获取到监控的数据;
在这里插入图片描述

说明我们的路由基本配置OK

2.Zuul路由映射配置

上面是zuul的简单使用,从接口地址很轻易的就暴露了服务提供者的唯一标识名microservice-student;有安全风险,我们需要将其隐藏;
ignored-services的作用是将原来的服务提供者唯一标识名禁用;
Prefix的作用是给服务加前缀

yml文件中添加以下配置:

zuul:routes:studentServer.serviceId: microservice-studentstudentServer.path: /studentServer/**ignored-services: "*"prefix: /xiaoqing

在这里插入图片描述
配置完毕后可通过以下链接做测试:

http://zuul.javaxl.com:3001/microservice-student/student/list


对应的配置会出现上面的错误页面,这是正常现象。

http://zuul.javaxl.com:3001/xiaoqing/studentServer/student/list
在这里插入图片描述

3.Zuul请求过滤配置

比如我们登录某个系统 需要身份验证,用户名密码啥的;

我们请求服务,也可以来设置身份验证,也就是过滤非法请求;Zuul通过ZuulFilter过滤器实现;
一般具体实现的话 每次经过Zuul服务网关 我们都对带来的token进行有效性验证;
在这里插入图片描述

我们先定义一个 AccessFilter类:

package com.xiaoqing.microservicezuul3001.filter;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.log4j.Logger;import javax.servlet.http.HttpServletRequest;/****/
public class AccessFilter extends ZuulFilter {Logger logger=Logger.getLogger(AccessFilter.class);/*** 判断该过滤器是否要被执行*/@Overridepublic boolean shouldFilter() {return true;}/*** 过滤器的具体执行逻辑*/@Overridepublic Object run() throws ZuulException {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();String parameter = request.getParameter("accessToken");logger.info(request.getRequestURL().toString()+" 请求访问");if(parameter==null){logger.error("accessToken为空!");ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(401);ctx.setResponseBody("{\"result\":\"accessToken is empty!\"}");return null;}//  token判断逻辑logger.info(request.getRequestURL().toString()+" 请求成功");return null;}/*** 过滤器的类型 这里用pre,代表会再请求被路由之前执行*/@Overridepublic String filterType() {return "pre";}/*** 过滤器的执行顺序*/@Overridepublic int filterOrder() {return 0;}}

然后再开启下 Filter配置:

package com.xiaoqing.microservicezuul3001.config;import com.xiaoqing.microservicezuul3001.filter.AccessFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ZuulConfig {@Beanpublic AccessFilter accessFilter(){return new AccessFilter();}
}

浏览器输入地址进行测试:
http://zuul.javaxl.com:3001/xiaoqing/studentServer/student/list

测试结果如下
在这里插入图片描述
http://zuul.javaxl.com:3001/xiaoqing/studentServer/student/list?accessToken=idsfj

测试结果如下
在这里插入图片描述
over…


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部