GatewaySpring Cloud项目部署Gateway网关
说明:本文写作目的单纯是记录一次项目搭建,以便于以后查看。
开发工具:IDEA;操作系统:MacOS
一、Gateway网关什么用?
身份认证、权限校验、服务路由、负载均衡、限流
二、搭建步骤
1.引入库
我是因为项目有nacos集群所以有集群依赖
代码如下(示例):
<!-- 网关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos集群 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
2.yml里配置服务名称和集群地址
没有集群的可以不用写集群部分
代码如下(示例):
server:
port: 1003
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848 # nacos服务器地址
gateway:
routes: # 网关路由配置
- id: core # 路由id,唯一
uri: lb://core # 路由的目标地址 lb就是负载均衡,后面跟服务名称
predicates: # 路由断言,判断请求是否符合路由规则的条件
- Path=/user/** # 按路径匹配,判断路径是否是以 /user/** 开头,如果是就会带入到core中
- id: order # 另一个路由
uri: lb://order
predicates:
- Path=/order/**
除了表格中这些,在官网其实可以找到所有工厂更为详细的介绍。
贴出3.1.1的版本的地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories
三、过滤器
官网提供的过滤器有三十多种,地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
以下代码示例就是增加了一个【添加请求头】的过滤器。其他实例根据需求参考官网文章即可。
代码示例:
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
filters:
- AddRequestHeader=X-Request-red, blue
四、全局过滤器
示例:
需求:拦截请求,需要判断请求是否符合以下条件:
1. 判断参数中是否有authorization
2. 判断authorization的值是否是admin
同时满足就放行,否则就拦截
代码示例:
@Order(0) // 数字越大优先级越高
@Component
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 1. 获取请求参数
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> params = request.getQueryParams();
// 2. 判断参数中是否有authorization
String authorization = params.getFirst("authorization");
// 3. 判断参数值是否为admin。有,放行;没有,拦截。
if("admin".equals(authorization)){
// 从过滤器链条(chain)中找到下一个过滤器,执行下一个过滤器的过滤。等于这个过滤器通过了(放行)
return chain.filter(exchange);
}
// 设置状态码,401
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
// 设置返回状态,拦截
return exchange.getResponse().setComplete();
}
}
五、跨域问题
起因:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被拦截器拦截。
解决方案:CORS
简单修改配置文件即可
spring:
cloud:
gateway:
globalcors: # 全局的跨域处理
add-to-simple-url-handler-mapping: true # 解决option请求被拦截的问题
corsConfiguration: # 允许哪些网站的跨域请求
'[/**]': # 拦截一切请求
allowedOrigins: # 允许哪些网站跨域请求
- "http://localhost:1003"
- "http://www.leyou.com"
allowedMethods: # 允许跨域ajax的请求方式
- "GET"
- "POST"
- "Delete"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowedCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期
遇到的问题
- 在执行通过网关调用接口时,发现“503:Service Unavailable”的错误。
错误原因:
由于springcloud2020弃用了Ribbon,因此Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,出现了503情况。
处理方案:
网关模块引入pringcloud loadbalancer包即可
<!--客户端负载均衡loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggahkc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01