1.商城项目--工程搭建2.电商项目-微服务网关介绍
3.电商项目-微服务网关使用的问题
4.电商项目-微服务网关限流5.电商项目--分布式文件存储FastDFS简介6.电商项目--分布式文件存储FastDFS搭建7.电商项目-跨域解决方案CORS8.电商项目-数据同步解决方案(一)9.电商项目-网站首页高可用(一)10.电商项目-网站首页高可用(二)11.电商项目-分布式ID12.电商系统-用户认证(一)13.运维工程师都做什么14.敏捷方法(kanban和Scrum)15.毕业设计-王者荣耀战队数据分析系统的设计与实现16.Linux系列(一)17.网络工程师职业简介和职业前景18.电商系统-用户认证(二)19.电商系统-用户认证(三)基于公钥解析JWT令牌20.电商项目-订单处理(一)处理超时未支付订单21.电商项目-微信支付(一)微信支付快速入门22.电商项目-分布式事务(一)23.电商项目-微信支付(二)微信支付二维码24.电商项目-微信支付(三)支付回调处理25.电商项目-分布式事务(二)分布式事务解决方案26.电商项目-分布式事务(三)基于Seata实现分布式事务27.电商项目-分布式事务(四)基于消息队列实现分布式事务一、微服务网关跨域问题
项目采用前后端分离架构,前段存在自己的前段系统,并且会单独部署,同样后端系统也都是单独部署,这样就一定存在跨域问题。可以在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/手机
成功返回结果。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2018-12-05 .Net委托事件多播委托示例