posts - 206,  comments - 26,  views - 17万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

  一、微服务网关跨域问题


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

  成功返回结果。

posted on   努力--坚持  阅读(92)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2018-12-05 .Net委托事件多播委托示例
点击右上角即可分享
微信分享提示