栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Gateway网关

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Gateway网关

目录

作用:

搭建网关

路由断言

Gateway中的路由过滤器配置

全局过滤器

 案例:定义全局过滤器,拦截用户判断身份

过滤器执行顺序

跨域请求处理


 

作用:

身份认证:用户能不能访问

服务路由:用户访问到那个服务中去

负载均衡:一个服务可能有多个实例,甚至集群,负载均衡就是你的请求到哪一个实例上去

 还一个请求限流功能:对请求进行流量限制,对服务进行请求限制;

两种网关实现:


搭建网关

 流程:

1.首先咱们先将服务以及网关注册到Nacos注册中心;2.然后用户请求,网关路由进行判断地址是不是以/user或者/order开头的,如果是,则跳转路由目标地址uri,然后请求地址则会代理到userservice或者是orderservice,3.然后再从Nacos注册中心里根据服务orderservice或者是xxxservice找到对应的地址,4.最后根据负载均衡找到实例

1.创建gateway网关模块

 2.导入nacos服务发现依赖和gateway依赖,说明是个网关

     
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            2.2.5.RELEASE
        

        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        

3.然后进行配置文件的配置,配置服务的信息以及地址将其注册到Nacos中。还有路由的信息(1.路由标示2.目标地址3.路由断言)

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos地址
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user
@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {

    
    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        //1.得到request中的所有参数
        MultiValueMap params = request.getQueryParams();

        //2.获取里面含有authorization的参数
        String auth = params.getFirst("authorization");

        //3.判断参数是否符合:authorization==admin
        if("admin".equals(auth)){
            return chain.filter(exchange);
        }

        //4.进行拦截,并且设置响应状态码
        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        return exchange.getResponse().setComplete();
    }
}

当request请求参数authorization!=admin,被拦截的情况

 当加上请求参数,并且值符合

 总结:

跟Gateway过滤器最大的区别就是,它可以自定义

 


过滤器执行顺序

  可以发现GlobalFilter和DefaultFilter、当前路由器是同一种

 执行顺序注意事项:

1.order值越小优先级越高,优先看order值

2.当order值一样时,顺序好似defaultFilter优先,因为它是排在路由routes​​​​​​


跨域请求处理

跨域:域名不一致

端口不一致:8080与8081

跨域问题:浏览器禁止请求的发起者与服务端发生跨域的ajax请求,请求被浏览器拦截的问题——>像我们之前的订单服务调用用户服务就不属于跨域问题;

CORS方案:

 跨域模板:

  globalcors: # 全局的跨域处理
        add-to-simple-url-handler-mapping: true # 网关放行请求
        cors-configurations:
          '[/**]':
            allowedOrigins: # 允许哪些网站跨域请求
              - "http://localhost:8090"
              - "http://www.leyou.com"
            allowedMethods: #运行跨域ajax的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
            allowedHeaders: "*" #允许在请求中有头信息
            allowCredentials: true # 是否允许携带cookie
            maxAge: 3600

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872284.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号