基于SpringBoot的API网关实现

目录

一、背景&目标

二、基于SpringBoot的API网关架构

2.1、概要架构图

2.2、架构说明

2.3、实现说明

2.3.2 高性能

2.3.3 高可用

2.3.4 安全性

三、总结


一、背景&目标

在微服务架构已经很普及的今天,API网关是整个微服务体系中是必不可少的基础服务。提到API网关大家可能会想到Zuul、Spring Cloud Gateway等开源API网关,Zuul2.x、Spring Cloud GateWay这些基于Reactor模式(响应式模式)的开源网关在高并发、高可用的需求场景下也已经被很多组织在生产环境中所验证。

我们在实际业务场景中可以直接使用Zuul、SpringCloud GateWay来满足我们业务的需求,即使需要在网关层实现一些具体的业务逻辑,我们也可以在开源的基础上进行二次开发。但如果我们只需要使用API网关核心的能力,同时需要在API层实现一些业务逻辑,我们基于SpringBoot自己来实现API网关,我们可以怎样来实现呢?通过结合实际业务需求以及对开源API网关的的学习,梳理出API网关的核心能力目标,具体如下:

1、基础能力

  • 鉴权
  • 路由转发
  • 标准化返回
  • 自定义异常

2、一定的高性能&高可用

  • API网关作为微服务体系下的基础服务,API网关本身需要有比较高的性能,完整的一次请求在网关层消耗的时间要尽可能的小。
  • 业务服务出现异常时,要能够保证网关不因为雪崩效应导致网关失去处理、自恢复的能力。

3、安全性

  • API网关直接暴露在公网,对于恶意IP,API网关服务要有能力对恶意IP进行访问限制。
  • API网关要防止业务日志从API网关数据泄露。

二、基于SpringBoot的API网关架构

2.1、概要架构图

2.2、架构说明

  • 基础能力

按照DDD思想,划分为Pre routing filters、Routing filters、Response filters、Error filters四个微观领域,分别对应转发前处理、转发处理、返回处理、错误处理四个方面。

  • 高性能

为了满足网关的基础能力,同时保证网关具有一定的高性能,基于NIO2(AIO)模式来构建基础架构。

  • 高可用

为了保证网关具有高可用性,使用Alibaba Sentlnel进行限流、熔断降级提高网关服务的健壮性。

  • 安全性

为了能够对黑名单IP进行拒绝访问,提供灵活的配置能力。

业务数据日志默认不在网关中日志中记录

 

2.3、实现说明

2.3.1 基础能力

Pre routing filters

使用Java Filter来实现Pre routing filters相关能力,包括IP黑名单、登录态、鉴权、白名单等过滤器实现。下面是IP黑名单过滤器的示例,可参考:

/**
 * 黑名单IP过滤器
 */
@Component
@WebFilter(urlPatterns = "/*", filterName = "backListFilter")
@Slf4j
public class BackListFilter implements Filter, Ordered {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String remoteAddress="";
        String blackList="";
        if(b
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值