27、Spring Cloud整合网关zuul入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangjinjin520/article/details/89785957

公众号: java乐园

基于Spring的微服务结点在能力上没有高低贵贱之分,但是在角色上会分为边缘服务和内部服务两部分。内部服务是为对内暴露服务的结点,供架构内部来调用;边缘服务是对外部网络暴露的服务结点,也就是对外API接口。
开发人员为了防止服务被黑客攻击,需要编写各种权限机制,这些机制在每个微服务结点都要实现一次。一旦鉴权上有什么bug,又要全部节点上推倒重来,噩梦;运维人员在边缘服务前段都会架一个F5或者Nginx等负载均衡的代理,需要手动维护一份服务列表和服务地址的路由信息,随着结点的扩展或地址调整这份列表要变来变去。
为了解决鉴权重复的问题,使业务结点本身只关心实现自己的业务,将对权限的处理抽离到上层。外部客户先请求到Zuul上,在Zuul服务上对权限进行统一实现和过滤,以实现微服务结点的过滤和验证;为了解决请求路由和安全过滤,Spring Cloud推出了一个API gateway组件:Spring Cloud Zuul。
在这里插入图片描述

Zuul对路由的配置有三种方式:

第一种(path-url):如果请求/sina这个地址,将会转发到http://www.sina.com.cn上去
在这里插入图片描述
第二种(path-serviceId):如果请求/user-consumer开头的地址,将会转发到eureka上serviceId为sc-user-provider这个服务上去。

第三种(给微服务名指定path):给sc-user-provider这个微服务指定了它的请求地址是/user-service/**
(其实这里还隐藏了第四种:什么都不配,默认给注册到eureka上的所有服务以第三种方式进行路由,path就是微服务自己的名字,但是此种方式又是不安全的,相当于将非边缘服务也暴露给外网,一般需要关闭这个默认配置zuul.ignored-services=*,或者至少将受保护的微服务列表维护到zuul.ignored-services中)

今天介绍一下第一种方式
1、 新建项目sc-zuul,对应的pom.xml文件如下

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>spring-cloud</groupId>
	<artifactId>sc-zuul</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>sc-zuul</name>
	<url>http://maven.apache.org</url>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
	</parent>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>

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

	</dependencies>
</project>

2、 新建配置文件application.yml

server:
  port: 8070
  
spring:
  application:
    name: sc-zuul
    
zuul:
  routes:
    sina:
      path: /sina/**
      url: http://www.sina.com.cn
    baidu:
      path: /baidu/**
      url: http://www.baidu.com

3、 新建启动类ZuulApplication.java

package sc.zuul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZuulApplication.class, args);
	}
	
}

4、 启动项目
在这里插入图片描述
5、 验证
访问地址http://127.0.0.1:8070/baidu/跳转到百度
在这里插入图片描述

访问地址http://127.0.0.1:8070/sina/跳转到新浪

在这里插入图片描述

扫描二维码关注公众号,回复: 6203269 查看本文章

参考:
https://blog.csdn.net/yejingtao703/article/details/77816555/
https://www.cnblogs.com/ityouknow/p/6944096.html

猜你喜欢

转载自blog.csdn.net/huangjinjin520/article/details/89785957