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

一、微服务网关跨域问题

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

成功返回结果。

相关推荐
吴建旭 智宅焕42 分钟前
智能家居全国交付中报价工具与交付基础设施的架构分离设计:接口化路径与交付确定性系统实现
架构·智能家居
你看我名字1 小时前
产品参数昨天还对,今天已过期:数眼智能与大模型应用如何做资料版本校验
开发语言·架构
xbzb1 小时前
Docker 架构与部署:一条 docker run 到底走了三层
docker·容器·架构·镜像·加速·daemon
Decay__2 小时前
SQL Server 数据库全栈运维实战系列 — 合集索引(24 篇)
运维·数据库·sql·mysql·架构
安易算力7 小时前
Token计费系统设计与优化:算力API的后端架构实践
架构
Decay__10 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
一只爱撸猫的程序猿11 小时前
我看着一个 AI 引擎在 14 天里,从"记忆"走进了"搜索"
人工智能·后端·架构
Dawson Zhu15 小时前
从空间 Scaling 到时间 Scaling
人工智能·语言模型·架构·aigc·agi
say_fall21 小时前
【AI大模型】MCP 模型上下文协议:客户端-服务器架构、JSON-RPC 消息与能力协商、工具发现与调用链路、与函数调用的分工
服务器·人工智能·架构
Decay__1 天前
14_MySQL 高可用与容灾架构 —— MGR / InnoDB Cluster / Keepalived+VIP / 双主 / 读写分离 / 两地三中心
运维·数据库·sql·mysql·架构