一、微服务网关跨域题目
项目采用前后端分离架构,前段存在自己的前段系统,并且会单独部署,同样后端系统也都是单独部署,这样就一定存在跨域题目。可以在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= 1server: port: 9101eureka: 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/手机
成功返回效果。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |