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

一、微服务网关跨域问题

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

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

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

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

XML 复制代码
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)

java 复制代码
@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地址)

java 复制代码
@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/手机

成功返回结果。

相关推荐
weixin_448119942 小时前
Datawhale DeepSeek Harness 技术入门与架构原理 笔记4
笔记·架构
Mininglamp_27188 小时前
接口调用 vs 屏幕理解:两种 GUI 自动化架构的技术取舍
运维·架构·自动化
excel10 小时前
IndexNow:让搜索引擎更快发现网站更新的主动通知协议
前端·后端·架构
吴建旭 智宅焕10 小时前
智能家居交付边界的系统化设计:方案设计与合作公约的规则架构
架构·智能家居
Raymond168810 小时前
AI配音工具长文本合成架构技术解析:全局音色锚定与声学状态跟踪
人工智能·架构·实时互动·视觉检测·音视频·语音识别
林伽一12 小时前
推理链路与资本成本同时收紧,AI 工程进入算细账阶段|2026年10月21日
人工智能·科技·ai·架构
天远API12 小时前
零信任架构实战:基于天远运营商二要素V即时版构建自动化分时租赁出行会员身份一致性审核网关
运维·人工智能·架构·自动化
海边捡石子12 小时前
从零设计一个通用智能电话平台:FreeSWITCH + ESL + AI 实战架构
人工智能·架构·webrtc
这个DBA有点耶13 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
喵个咪16 小时前
GoWind Kanban 拆解:看板拖拽背后——LexoRank、乐观锁与尽力而为广播
后端·架构·go