当前位置: 首页 > article >正文

电商项目-微服务网关使用的问题

一、微服务网关跨域问题

        项目采用前后端分离架构,前段存在自己的前段系统,并且会单独部署,同样后端系统也都是单独部署,这样就一定存在跨域问题。可以在controller类上添加注解来进行解决,但是现在的访问都是基于网关进行操作,所以还需要在网关系统上对跨域问题进行解决。具体解决方案:在网关系统添加配置信息:

修改application.yml ,在spring.cloud.gateway节点添加配置:

      globalcors:
        cors-configurations:
          '[/**]': # 匹配所有请求
            allowedOrigins: "*" #跨域处理 允许所有的域
            allowedMethods: # 支持的方法
            - GET
            - POST
            - PUT
            - DELETE

网关模块spring.cloud.gateway的配置文件application.yml如下:

spring:
  application:
    name: sysgateway
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          '[/**]': # 匹配所有请求
            allowedOrigins: "*" #跨域处理 允许所有的域
            allowedMethods: # 支持的方法
            - GET
            - POST
            - PUT
            - DELETE
      routes:
      - id: goods
        uri: lb://goods
        predicates:
        - Path=/goods/**
        filters:
        - StripPrefix= 1
server:
  port: 9101
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka
  instance:
    prefer-ip-address: true

二、微服务网关自定义过滤器


        当有了网关系统,客户端所有访问先进入到网关中,由网关将请求转发到具体某个服务。基于这个特点,可以在网关上通过过滤器的形式进行特定业务的操作:比如ip(黑白名单)拦截、特定地址的拦截等。
定义两个过滤器 :获取客户端访问IP 和客户端访问URL地址:

(1)shangcheng_gateway_system创建IpFilter(获取客户端访问IP)

@Component
public class IpFilter implements GlobalFilter, Ordered {
​
    //具体业务逻辑
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
​
        System.out.println("经过第1个过滤器IpFilter");
        ServerHttpRequest request = exchange.getRequest();
        InetSocketAddress remoteAddress = request.getRemoteAddress();
        System.out.println("ip:"+remoteAddress.getHostName());
        return chain.filter(exchange);//放行过滤器
    }
​    
    //过滤器的执行优先级
    @Override
    public int getOrder() {
        return 1;
    }
}

(2)shangcheng_gateway_system创建UrlFilter(获取客户端访问url地址)

@Component
public class UrlFilter implements GlobalFilter, Ordered {

    //具体业务逻辑​
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("经过第2个过滤器UrlFilter");
        ServerHttpRequest request = exchange.getRequest();
        String url = request.getURI().getPath();
        System.out.println("url:"+url);
        return chain.filter(exchange);//放行过滤器
    }
​    //过滤器的执行优先级
    @Override
    public int getOrder() {
        return 2;
    }
}

三、网关访问路由转发测试

网关访问路由转发测试:
        直接访问Goods微服务:localhost:9001/brand/category/手机

        成功返回结果。
        访问网关:localhost:9101/goods/brand/category/手机

        成功返回结果。


http://www.kler.cn/a/428635.html

相关文章:

  • 基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践
  • 产品经理面试题总结2025【其一】
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)
  • 机器学习-核函数(Kernel Function)
  • 【整体介绍】
  • 电子科大2024秋《大数据分析与智能计算》真题回忆
  • 透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
  • redis击穿,穿透,雪崩以及解决方案
  • unity 2D像素种田游戏学习记录(自用)
  • Three.js曲线篇 6.雕刻平面大师shape
  • Java IO流与NIO技术综合应用
  • Qt实现自定义消失动画弹出提示框
  • 数据结构 (27)查找的基本概念
  • 基于MATLAB野外观测站生态气象数据处理分析实践应用
  • HCIA-openGauss_2_2连接与认证
  • 2024第十六届蓝桥杯模拟赛(第二期)-Python
  • 汽车总线协议分析-CAN-FD总线
  • ORB-SLAM2 ---- 词袋模型BOW
  • PHP语法学习(第七天)-循环语句,魔术常量
  • quartz 架构详解
  • 算法-字符串-43.字符串相乘
  • 【并集查询】.NET开源 ORM 框架 SqlSugar 系列
  • G15沈海高速茶白高架自动化监测
  • 机器学习之Friedman检验
  • 通过华为鲲鹏认证的软件产品如何助力信创产业
  • 网络原理(HPPT/HTTPS)