不同的微服务一般会有不同的网络地址,而一个功能可能调用多个微服务中的接口。所以采用网关可以解决(客户端多次请求不同的微服务、跨域问题、认证复杂问题《不同的微服务需要独立认证》、受到不同的微服务使用的防火墙等不友好协议问题)
1、什么是网关
网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。
网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 网关这一层
优点:安全、易于监控、易于认证、易于统一授权
2、什么是微服务网关
微服务网关就是一个系统,通过暴露该微服务网关系统,方便我们进行相关的鉴权,安全控制,日志统一处理,易于监控的相关功能。
3、那些技术可以实现微服务网关
1)nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
2)zuul ,Zuul 是 Netflix 出品的一个基于 JVM 路由和服务端的负载均衡器。
3)
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
</dependencies>
4.2、创建引导类
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class,args);
}
}
4.3、配置application.yml
server:
port:7777
spring:
application:
name: 微服务名称
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]': # 匹配所有请求
allowedOrigins: "*" #跨域处理 允许所有的域
allowedMethods: # 支持的方法
- GET
- POST
- PUT
- DELETE
routes:
# 平台管理
- id: admin
uri: lb://leadnews-admin
predicates:
- Path=/admin/**
filters:
- StripPrefix= 1
5、全局过滤器实现jwt校验
思路分析
1)用户进入网关登录,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录
2)用户登录成功,后台签发JWT token信息返回给用户
3)用户再次登录网关开始访问,网关过滤器接受用户携带的token
4)网关过滤器解析token,看token是否有权限有效,有放行。