前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统一网关Geteway

统一网关Geteway

作者头像
用户10521079
发布2023-05-04 19:04:30
3340
发布2023-05-04 19:04:30
举报
文章被收录于专栏:Smile博客

统一网关Gateway 在SpringCloud中网关的实现包括两种:

  • gateway
  • zuul
  1. Zuul是基于Servlet的实现,属于阻塞式编程。
  2. SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

1.添加依赖

不能有web起步依赖(springboot项目项目添加这两个依赖即可)

2.配置其信息

代码语言:javascript
复制
server:
  port: 10010

spring:

  application:
    name: gateway 
 
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 
    gateway: 
       routes:                        #网关路由配置
         - id: user-service           #路由的id 自定义 只要唯一即可
           uri: lb://userservice      #路由的目标地址
           predicates:                #路由断言 判断请求是否符合规则
             - Path=/user/**

3.断言工厂

代码语言:javascript
复制
-After=2017-01-20T17:42:47.789-07:00[America/Denver]
-Before=2017-01-20T17:42:47.789-07:00[America/Denver]

4.网关过滤器

官网

代码语言:javascript
复制
cloud:
    nacos:
      server-addr: 127.0.0.1:8848 
    gateway: 
       routes:                        #网关路由配置
         - id: user-service           #路由的id 自定义 只要唯一即可
           uri: lb://userservice      #路由的目标地址
           predicates:                #路由断言 判断请求是否符合规则
             - Path=/user/**
           filters:
             - AddRequestHeader=Truth, Itcast is freaking  #添加请求头 truth为key 后面为value
       default-filters:
            - AddRequestHeader=Truth, Itcast is freaking   

default-filters 对所有的都生效

5.定义一个配置了来验证信息

代码语言:javascript
复制
@Component
@Order(-1)    //定义优先级
public class AuthorizeFilter implements GlobalFilter{

	//exchange上下文跟
	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
		// TODO Auto-generated method stub
		//1.获取请求参数
		ServerHttpRequest request = exchange.getRequest();
		MultiValueMap<String, String>  params = request.getQueryParams();
		//2.获取参数中的authorization参数
		String auth = params.getFirst("authorization");
		
		//3 判断 是否放行
		if ("admin".equals(auth)) {
			//相当于在下一个请求连里面找到exchange  相当于放行
			return chain.filter(exchange);
					
		}
		
		//5 否则拦截
		//5.设置状态码 401
		exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
		
		return exchange.getResponse().setComplete();
	}

}

顺序

总结

6. 网关跨域问题

网关中加入以下配置

代码语言:javascript
复制
spring:
  cloud:
    gateway:
      globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
        corsConfigurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站的跨域请求
              - "http://localhost:8090"
              - "http://www.leyou.com"
            allowedMethods: # 允许的跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" # 允许在请求中携带的头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 360000 # 这次跨域检测的有效期
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.添加依赖
  • 2.配置其信息
  • 3.断言工厂
  • 4.网关过滤器
  • 5.定义一个配置了来验证信息
  • 6. 网关跨域问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档