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

一、微服务网关跨域问题

项目采用前后端分离架构,前段存在自己的前段系统,并且会单独部署,同样后端系统也都是单独部署,这样就一定存在跨域问题。可以在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/手机

成功返回结果。

相关推荐
SmartBrain1 小时前
基于 Spring AI + Skill 工程 + MCP 技术方案研究
人工智能·spring·架构·aigc
亚马逊云开发者2 小时前
【Bedrock AgentCore】AI Agent 回答不一致怎么办?双 Memory 架构实现服务标准化(附完整代码)
大数据·人工智能·架构
拾薪3 小时前
[SuperPower] Brainingstorm - 流程控制架构分析
网络·人工智能·ai·架构·superpower·brainstorming
黄俊懿4 小时前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第一节:DNS优化
网络·计算机网络·架构·系统架构·cdn·dns·架构设计
全栈软件开发5 小时前
企业年报服务系统/小微服务助手小程序源码带搭建教程
微服务·年报小程序源码
eSsO KERF5 小时前
湖仓一体架构解析:数仓架构选择(第48天)
架构
程序员小胖胖7 小时前
来聊聊我为什么放弃了三层架构
架构
Jiude8 小时前
当给飞书里的 OpenClaw 机器人发一条消息后,到底发生了什么?
架构
淡定o9 小时前
Redis List 换成 Streams,以为能睡安稳觉了——结果消息还是在丢
架构
亚历克斯神9 小时前
Java 代码质量与静态分析:2026 实战指南
java·spring·微服务