Apache ShenYu它是Java原生API网关,用于服务代理、协议转换和API治理。

1.2 特性

服务代理 : Support for Apache® Dubbo™, Spring Cloud, gRPC, Motan, SOFA, TARS, WebSocket, MQTT
安全 : Sign, OAuth 2.0, JSON Web Tokens, WAF plugin
API治理 : Request, response, parameter mapping, Hystrix, RateLimiter plugin
可观测性 : Tracing, metrics, logging plugin
控制面板 : Dynamic traffic control, visual backend for user menu permissions
拓展 : Plugin hot-swapping, dynamic loading
集群 : NGINX, Docker, Kubernetes
语言 : provides .NET, Python, Go, Java client for API register

1.3 架构图

2.1 运行先决条件

在部署shenyu-admin项目前,需初始化其所使用的数据库(数据库目前支持:MySQL、PostgreSql、Oracle),其中所用到的脚本文件都存放在项目根目录下的db目录。我们这里使用的数据库是PostgreSql。
在项目pg初始化脚本目录中找到初始化脚本create-database.sql、create-table.sql,并使用客户端连接工具连接你的PostgreSql服务依次执行,由此你会得到一个名为shenyu的数据库,它之后可作为shenyu-admin项目的数据库使用。
在这里插入图片描述
在这里插入图片描述

2.1 本地运行

由于我们需要研究和改造shenyu网关项目,因此我们直接从github中拉取源码在本地运行即可。拉取地址为:git clone https://github.com/apache/shenyu.git。

启动步骤:
(1)我们这里使用PostgreSql来存储,需要先初始化数据库和修改application-pg.yml的jdbc相关配置,在设置变量–spring.profiles.active = pg启动服务。
在这里插入图片描述
在这里插入图片描述
(2)使用开发工具启动org.apache.shenyu.admin.ShenyuAdminBootstrap,访问http://localhost:9095,默认用户名和密码分别为:admin和123456。
(3)使用开发工具启动org.apache.shenyu.bootstrap.ShenyuBootstrapApplication。
在这里插入图片描述

3 插件使用

Apache ShenYu将基于责任链模式由所有启用的插件来执行它。作为Apache ShenYu的核心,插件是可扩展和可热插拔的。不同的插件做不同的事情。当然,用户也可以自定义插件来满足自己的需求。

3.1 ModifyResponse插件

3.1.1 插件名称

响应修改插件。

3.1.2 适用场景

需要对接口的响应头部参数、响应HTTP状态码或响应体进行修改的场景。

3.1.3 插件功能

修改HTTP响应状态码。
添加、设置、覆盖或者移除响应头部参数。
添加、覆盖或者移除响应体参数。

3.1.4 插件代码

核心模块shenyu-plugin-modify-response。
核心类
org.apache.shenyu.plugin.modify.response.ModifyResponsePlugin

3.1.5 如何使用插件

3.1.5.1 插件使用流程图
3.1.5.2 接入SpringBoot应用改造

为了测试ModifyResponse插件的使用,我们需要准备一个SpringBoot应用,将这个SpringBoot应用的网关交由shenyu网关来管理。
(1)pom.xml引入集成依赖包

<dependency>
    <groupId>org.apache.shenyu</groupId>
    <artifactId>shenyu-spring-boot-starter-client-springmvc</artifactId>
    <version>2.5.0</version>
</dependency>

(2)application.yml配置注册到shenyu网关注册配置信息

shenyu:
  register:
    registerType: http #zookeeper #etcd #nacos #consul
    serverLists: http://localhost:9095 #localhost:2181 #http://localhost:2379 #localhost:8848
    props:
      username: admin
      password: 123456
  client:
    http:
      props:
        contextPath: /springboot
        appName: springboot

(3)修改Controller接口映射路径
@ShenyuSpringMvcClient(“/vehicleType”)
@ShenyuSpringMvcClient(“/getList”)

import org.apache.shenyu.client.springmvc.annotation.ShenyuSpringMvcClient;
@RestController
@AllArgsConstructor
@RequestMapping("/vehicleType")
@ShenyuSpringMvcClient("/vehicleType")
public class VehicleTypeController {
    private final VehicleTypeService vehicleTypeService;
     * 查询车辆类型
    @PostMapping("/getList")
    @ShenyuSpringMvcClient("/getList")
    public RequestResult getList() {
        return vehicleTypeService.getList();

改造完成之后,启动项目,查看控制台打印信息,看到如下输出内容说明注册到shenyu网关成功了。
在这里插入图片描述

3.1.5.3 启用插件

在shenyu-admin --> 基础配置 --> 插件管理 --> modifyResponse设置为开启。
在这里插入图片描述

3.1.5.4 配置插件

Shenyu-admin插件列表 --> HttpProcess --> modifyResponse,先添加选择器,然后在添加规则。
(1)添加选择器
在这里插入图片描述
(2)添加规则
在这里插入图片描述

3.1.5.5 接口调用
Proxy: Support for Apache Dubbo, Spring Cloud, gRPC, Motan, SOFA, TARS, WebSocket, MQTT Security: Sign, OAuth 2.0, JSON Web Tokens, WAF plugin API governance: Request, response, parameter mapping, Hystrix, RateLimiter plugin Observability: Tracing, metrics, logging plugin Dashboard: Dynamic traffic control, visual backend for user menu permissions Extensions: Plugin hot-swapping, dynamic loading Cluster: NGINX, Docker, Kubernetes Language: provides .NET, Python, Go, Java client for API registe
避免重复造轮子,并且官方文档比较丰富,提供了中文,涉及到官网有的直接提供链接。 https://shenyu.apache.org/zh/projects/shenyu/overview/ 官方文档: https://shenyu.apache.org/zh/projects/shenyu/shenyu-set-up/ 官方提供多种方式,为了比较直观,我们采用本地构建的方式 下载代码: git clone https://github.com/apache/incubator-sh
Apache ShenYu 是一个异步的,高性能的,跨语言的,响应式的 API 网关。 ShenYu 网关使用 dubbo 插件完成对 dubbo服务的调用。你可以查看官方文档 Dubbo快速开始 了解如何使用插件。 本文基于shenyu-2.4.3版本进行源码分析,官网的介绍请参考 Dubbo服务接入 。 1. 服务注册 以官网提供的例子为例 shenyu-examples-dubbo 。 假如你的dubbo服务定义如下(spring-dubbo.xml): <beans xmlns="h.
如何修改response的header和body如何修改response的header和body修改header修改statusCode修改body 如何修改response的header和body shenyu是基于 webflux 的响应式编程项目,由于之前没有接触过,我在开发 modifyResponse插件的时候,开始有点摸不着头脑,然后大佬推荐了一个链接: https://htmlpreview.github.io/?https://github.com/get-set/reactor-core/
shenyu插件开发shenyu插件开发成为Contributor接任务完成任务如何开发一个shenyu自定义插件定义插件定义插件starter自定义插件使用tips shenyu插件开发 年初学习 soul 网关的时候,写了一系列入门文章。最近发现 soul 项目进入了 apache 孵化基金会,并且改名为shenyu。当时发现 shenyu 发了几个issue,我接了其中一个,由于当时正在迁移仓库到apache,加上我不熟悉插件开发流程,最后我花了2个月才完成这个任务。下面说下我完成issue的经历。 公司、个人开发的系统上线后,系统中 API 暴露到网络上会存在一定的安全风险,比如:爬虫、恶意访问、错误访问等。API没有安全性,用户可以任意注册即可无限次访问和调用API,且没有请求与特定用户数据关联的简单方法,就无法防止恶意用户的恶意请求等。 常用 API 接口安全措施如下几种: (1)数据加密 数据在互联网传输过程很容易被抓包,如果直接传输,那么用户数据可能被其他人获取,导致系统安全性等问题,所以必须对数据加密。常见的做法是对关键字段加密,比如用户密码直接通过 md5 加密。 (2)数据签名
针对不同环境修改api url,例如: http://192.168.1.100:8000 : http://192.168.1.100:8000 : http://192.168.1.100:8000 # install dependencies in this project root path. npm install # start npm start # install dependencies in this project root path. npm install # build for production npm run build # copy to shenyu-admin cp -rf dist/ * shen OAuth2.0介绍 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他 们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。 OAuth协议:https://tools.ietf.org/html/rfc6749 协议特点:简单:不管是OAuth服务提供者还是应用开发者,都很易于理解与使 Sa-Token 介绍 Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题 框架集成简单、开箱即用、API设计清爽,通过Sa-Token,你将以一种极其简单的方式实现系统的权限认证部分 登录认证 —— 单端登录、多端登录、同端互斥登录、七天内免登录 权限认证 —— 权限认证、角色认证、会话二级认证 Session会话 —— 全端共享Session、单端独享Session、自定义Session 踢人下线 —— 根据账号id踢人下线、根据Token值踢人下线 账号封禁 —— 指定天数封禁、永久封禁、设定解封时间 持久层扩展 —— 可集成Redis、Memcached等专业缓存中间件,重启数
这个错误通常是因为找不到或加载不了Shenyu Admin Bootstrap应用程序的主类所导致的。可能的原因包括: 1. 没有正确设置CLASSPATH环境变量,或者CLASSPATH环境变量中没有包含必要的类路径。 2. 找不到或加载不了Shenyu Admin Bootstrap应用程序的主类所依赖的类库。 3. Shenyu Admin Bootstrap应用程序的主类中有语法错误或编译错误。 你可以检查以上三个方面,尝试解决问题。另外,也可以检查你的操作系统和Java环境是否符合Shenyu Admin Bootstrap的要求。如果问题仍然存在,你可以提供更多的错误信息或上下文,以便更好地理解和解决问题。
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned 18086
it_shengge: 切换目录至/usr/local/apisix-docker/example,执行指令docker-compose -p docker-apisix up -d重启启动apisix网关。切换目录至/usr/local/apisix-docker/example/apisix_log 没有看到apisix_log 启动的时候报没有找到那个jar吧 Java 视频转码(转为MPEG-4格式) 编程课堂: 所需pom依赖都在博文中,建议清楚缓存 Java 视频转码(转为MPEG-4格式) uziweiketuo: 运行报error :NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil K8s高可用集群搭建 monkey_ma: 用 Kubernetes 官方 kube-vip 可以