在第二代SpringCloud中配置网关组件

        我们接着上次的微服务的项目继续搭建网关组件:          搭建微服务项目

前提准备:

        1.打开nacos服务注册中心,在浏览器通过这地址访问

http://10.48.185.7:8848/nacos/index.html

 

        2.启动page和product的微服务

 

        1.新建一个网关的项目

         2.导入pom依赖

 <!-- Spring Boot父启动器依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version><relativePath/></parent><dependencies><!-- 1Gateway网关 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- 2引入WebFlux --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><!-- 日志依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Lombok工具 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version><scope>provided</scope></dependency><!-- 引入Jaxb开始 --><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-core</artifactId><version>2.2.11</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.2.11</version></dependency><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.2.10-b140310.1920</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- 引入Jaxb结束 --><!-- Actuator可以帮助你监控和管理Spring Boot应用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- 热部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!-- 链路追踪 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency><!--nacos的客户端依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><dependencyManagement><dependencies><!-- Spring Cloud Neflix 公司出品的微服务组件的依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.RELEASE</version><type>pom</type><scope>import</scope></dependency><!--Spring Cloud Alibaba微服务组件的依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>utf-8</encoding></configuration></plugin><!-- 打包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

        3.编写配置文件

                向nacos服务中心注册,  application.properties

server.port=3300spring.application.name=leq-cloud-gatewayspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

                编写网关的配置,application.yml

 

spring:cloud:gateway:   # gateway网关配置routes: # 配置路由- id: service-page-router# 动态路由:从(消费)注册中心获取对应服务的实例uri: lb://leq-server-pagepredicates: # 当断言匹配成功后,则将请求转发给某个微服务- Path=/**

     

        4.创建启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class GatewapApplication {public static void main(String[] args) {SpringApplication.run(GatewapApplication.class,args);}
}

        5.启动该项目,可以看到我们的网关服务注册到中心了

         6.给page微服务中添加一个接口

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("page")
public class PageController {@RequestMapping("find")public String find(){return "获取message";   }
}

        7.重启page的微服务,访问刚刚写的接口

http://localhost:3100/page/find

      

        将端口改为网关的端口重新访问 ,也是可以通过我们配置的网关来访问的

         8.对访问的主机进行拦截


import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;import java.util.ArrayList;
import java.util.List;//定义全局过滤器,会对所有路由生效
@Slf4j
@Component
public class BlacklistGlobalFilter implements GlobalFilter, Ordered {//创建黑名单集合private static List<String> blacklist =new ArrayList<>();//添加黑名单static{
//        blacklist.add("127.0.0.1");blacklist.add("10.48.185.7");}@Override//编写过滤规则        exchange  封装了request和response对象     chain网关过滤器链(全局过滤器,单路由过滤器)  Mono对象public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//获取请求和响应对象ServerHttpRequest request = exchange.getRequest();ServerHttpResponse response = exchange.getResponse();//通过request对象获取ipString clientIP = request.getRemoteAddress().getHostString();System.out.println("ip:"+clientIP);if(blacklist.contains(clientIP)){// 状态码response.setStatusCode(HttpStatus.UNAUTHORIZED);DataBuffer wrap = response.bufferFactory().wrap("Request be denined!".getBytes());//拒绝访问,返回执行的结果数据return  response.writeWith(Mono.just(wrap));}//合法请求放行return chain.filter(exchange);}@Override//返回值表示当前过滤器过滤的顺序,数字越小越靠前public int getOrder() {return 0;}
}

        9.重启网关的微服务,被我们添加到黑名单的ip就无法访问我们的接口了

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团面试官:那你讲一讲Vuex吧

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 前言 周一接到了美团的一面&#xff0c;面试官人很好&#xff0c;基本都是围绕着简历来问&#xff0c;下面就是我重新…

DBeaver连接华为高斯数据库 DBeaver连接Gaussdb数据库 DBeaver connect Gaussdb

DBeaver连接华为高斯数据库 DBeaver连接Gaussdb数据库 DBeaver connect Gaussdb 一、概述 华为GaussDB出来已经有一段时间&#xff0c;最近工作中刚到Gauss数据库。作为coder&#xff0c;那么如何通过可视化工具来操作Gauss呢&#xff1f; 本文将记录使用免费、开源的DBeaver来…

【kubernetes系列】Kubernetes之资源配置范围管理LimitRange

概述 在默认情况下&#xff0c;Kubernetes不会对Pod加上CPU和内存限制&#xff0c;这意味着Kubernetes系统中任何Pod都可以使用其所在节点的所有可用的CPU和内存。在之前的章节https://blog.csdn.net/margu_168/article/details/131786000分享了针对集群中某个pod的资源限制&a…

云迁移第二波热潮来袭,你准备好了吗?

最近&#xff0c;云迁移再次被频繁提及&#xff0c;企业对云迁移的需求量有回升趋势&#xff0c;究其根本&#xff0c;主要有以下原因&#xff1a; 企业数字化进程加速&#xff0c;本地上云需求强劲 根据《2021中国企业上云指数洞察报告》&#xff0c;我国实体经济上云渗透率…

Appium+Python+PO 设计模式

目录 前言&#xff1a; 什么是 PageObject? 关于报告的输出 总结 前言&#xff1a; Appium是一个用于自动化移动应用程序测试的开源工具&#xff0c;Python是一种简单易学且功能强大的编程语言&#xff0c;PO&#xff08;Page Object&#xff09;设计模式是一种在自动化测…

使用shell监控应用运行状态通过企业微信接收监控通知

目的&#xff1a;编写shell脚本来监控应用服务运行状态&#xff0c;若是应用异常则自动重启应用通过企业微信接收监控告警通知 知识要点&#xff1a; 使用shell脚本监控应用服务使用shell脚本自动恢复异常服务通过企业微信通知接收监控结果shell脚本使用数组知识&#xff0c;…

行为型模式之迭代器模式

迭代器模式&#xff08;Iterator Pattern&#xff09; 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了一种顺序访问集合对象中各个元素的方法&#xff0c;而无需暴露集合的内部表示。 在迭代器模式中&#xff0c;有三个主要角色&a…

session 生命周期和经典案例-防止非法进入管理页面

文章目录 session 生命周期和Session 经典案例-防止非法进入管理页面session 生命周期Session 生命周期-说明代码演示说明 Session 的生命周期创建CreateSession2创建ReadSession2 解读Session 的生命周期代码示例创建DeleteSession Session 经典案例-防止非法进入管理页面需求…

bgp联邦

1、ip配置 [r1-LoopBack0]ip address 192.168.1.1 24 [r1-LoopBack1]ip address 10.0.0.1 24 [r1-GigabitEthernet0/0/0]ip address 12.0.0.1 24[r2-GigabitEthernet0/0/0]ip address 12.0.0.2 24 [r2-GigabitEthernet0/0/1]ip address 172.16.1.1 29 [r2-GigabitEthernet0/0/…

【从零开始学习CSS | 第三篇】选择器优先级

目录 前言&#xff1a; 常见选择器的优先级&#xff08;从高到低&#xff09; 选择器的权重&#xff1a; 总结&#xff1a; 前言&#xff1a; 在前几篇文章中我们介绍了大量的选择器&#xff0c;那么大量的选择器在使用的时候&#xff0c;一定是有一个优先级顺序的&#xff…

【计算机视觉】DINOv2(视觉大模型)代码使用和测试(完整的源代码)

文章目录 一、环境部署二、导入原图2.1 使用vit_s14的模型 三、使用其他模型3.1 使用vit_b14的模型3.2 使用vit_l14的模型3.3 使用vit_g14的模型 一、环境部署 !git clone https://ghproxy.com/https://github.com/facebookresearch/dinov2.git输出为&#xff1a; Cloning in…

DT灯光基础(辉光 雾 阴影 渲染选项)

点光源 不能宣染&#xff0c;换个版本。不能正常预览 聚光灯 t 手柄 挡光版 平行光阴影 光线追踪阴影 没有看见阴影 灯光使用贴图 环境光 不进行渲染物体 不渲染阴影 接收阴影 不反射 可以看到反射 没有反射了 灯光链接 取消灯照 灯光雾 辉光 变化不明显

C++初阶 - 3.类和对象(中)

目录 1.类的6个默认成员函数 2.构造函数 2.2特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现 7.const成员 8.取地址及const取地址操作符重载 1.类…

FCOS 论文学习

1. 解决了什么问题&#xff1f; 之前的目标检测器如 RetinaNet、SSD、YOLOv3 都依赖于 anchors。基于 anchors 的检测器有如下三个缺点&#xff1a; 检测表现对于 anchors 的大小、宽高比和数量等超参数很敏感&#xff1b;即使精心设计了 anchors&#xff0c;但由于大小和宽高…

论文投稿前细节检查

参考文献的doi统一要或不要&#xff0c;要参考期刊/会议之前的版本参考文献的会议和期刊作者的缩写方式&#xff0c;论文标题的首字母&#xff0c;发表会议或期刊的首字母&#xff0c;年份的位置等是否统一。同时&#xff0c;建议会议直接给缩写&#xff0c;期刊给全称。Fig、T…

【x-shell】介绍以及命令大全

提示&#xff1a;x-shell命令 介绍&#xff0c;以及命令大全 文章目录 前言一、x-shell是什么&#xff1f;二、x-shell功能三、x-shell使用四、x-shell的常用命令五、 ps -ef | grep 命令总结 前言 x-shell 提示&#xff1a; 一、x-shell是什么&#xff1f; x-shell命令&…

EasyCVR告警类型设置后首页需要刷新才能更新的问题优化

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。平台具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c…

【 NLP 】 句子transformer调用备忘录

一、说明 本篇对句子嵌入、文本相似性、语义搜索和图像搜索等诸方面调用实现进行记录,以便再次调用时,可以参考。

数据结构之List(双向链表)的实现

链节 链表由节点连成&#xff0c;节点的定义如下 # pragma once # include <iostream>template <typename T> struct listNode {T data;listNode <T>* pred;listNode <T>* succ;listNode(){}listNode(T d, listNode<T>* p, listNode<T>*…

Zabbix 自动发现及注册

1、依次选择 Configuratio、Discovery、Create discovery rule&#xff08;配置、自动发现、创建发现规则&#xff09; 创建客户端发现规则 2、zabbix客户端安装 agent zabbix客户端一键安装脚本 脚本参考链接 #!/bin/bash #Zabbix-Agent 5.0Zabbix_Service192.168.63.20#安…