简介:在Spring Cloud中,网关的角色是非常重要的,它负责整个系统的入口流量,并且可以处理路由、过滤、协议转换等操作
目录
1、网关的技术实现
1.1 网关功能
1.2 网关的形式
2、网关实现步骤
2.1 添加相关依赖
2.2 创建此module的main()方法,用来启动此服务
3、路由过滤器
3.1 路由断言工厂
4.1 路由过滤工厂
4.2 全局过滤器
4.3 跨域问题处理
4、总结
1、网关的技术实现
1.1 网关功能
图 1.1-1 网关功能 |
---|
|
上图中展示的便是网关的作用:
- 身份认证和权限校验:对不同的登录用户校验身份,确定有那些访问权限
- 服务路由、负载均衡:确定登录的用户访问那些服务,从而调用空闲的服务
- 请求限流:当访问量过多,就限制用户登录或者让用户等待
|
1.2 网关的形式
图 1.2-1 网关的两种形式 |
---|
|
|
2、网关实现步骤
2.1 添加相关依赖
图 2.1-1 添加相关依赖 |
---|
|
上图中展示的是搭建网关的第一步:
- 在项目中创建一个新的模块
- 在新模块pom文件中添加依赖
|
2.2 创建此module的main()方法,用来启动此服务
图 2.2-1 创建此module的main()方法 |
---|
|
上图中展示的是在当前项目中创建一个 gateway 模块而且创建此模块的main()方法,用来启动此服务 |
3、路由过滤器
3.1 路由断言工厂
图 3.1-1 路由断言工厂 |
---|
|
- 我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件
- 例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的
- 像这样的断言工厂在SpringCloudGateway还有十几个
|
4.1 路由过滤工厂
图 4.1-1 路由过滤工厂 |
---|
|
上图中展示的便是路由过滤工厂的常见过滤器 |
4.2 全局过滤器
package cn.itcast.gateway;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* 全局过滤器
*/
public class AuthorizeFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 1.获取请求
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> map = request.getQueryParams();
// 2.获取authorization参数
String authorizeFilter = map.getFirst("authorizeFilter");
// 3.校验
if ("admin".equals(authorizeFilter)){
// 4.校验成功,放行
Mono<Void> mono = chain.filter(exchange);
return mono;
}
// 5.校验失败,结束处理
exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
return exchange.getResponse().setComplete();
}
// 设置全局过滤器的执行顺序,数字越小越先执行
@Override
public int getOrder() {
return -1;
}
}
4.3 跨域问题处理
图 4.3-1 跨域问题处理 |
---|
|
上图展示的便是处理跨域问题的方法,即在网关微服务的配置文件中,添加如上对应配置(参数要根据开发情况做出调整) |
4、总结