在网上发现了一个牛X的思路,在做restful的时候,如果业务改变,需要每次都修改controller,后来方便了,直接透传的方式,其实也比较麻烦,每次都要写controller。需求变了接口也发生了改变,长期这样的结果,就是维护成本越来越高,直接service 通过spring 让他变成controller不就少写很多代码了。源码:https://github.com/limingios/netFuture/tree/master/api网关/idig8-api-gateway

背景

移动互联时代,都在追寻一个万能的解,其实这个解可能不存在。其实后端开发的挑战越来越多。里面很多个controller,如果系统越来越庞大,导致的结果维护困难。

什么是API网关

API网关是一个轻量的java http 接口组件,可无缝将普通的 Serive 方法转换成 http 接口。并从已下几点来达到提高开发效率与接口质量的目的。

  1. 去掉mvc控制器,将http请求直接无缝接入JAVA服务接口
  2. 统一出入参格式
  3. 统一异常规范
  4. 自动检测服务接口规
  5. 负责路由协议的转换
  • 普通的http接口
  • API网关接口的实现

当初一个接口开发一个控制器,1000个接口开发1000个控制器。一个一个封装参数,质量也提高了统一规范,出问题统一的方式回馈。不规范的代码也会被api网关拦截掉。

代码讲解

就5个类,不到500行代码。开发的人最喜欢又小又精湛的代码,不容易软。方便理解,方便使用,又粗又大的代码,很不方便迁移,不好控制容易软。

1.ApiGatewayHandler.java

转换器和调用加载器

2.ApiGatewayServlet.java

类似springboot的一个入口类

3.APIMapping.java

注解暴露类

4.ApiRequest.java

请求封装类

5.ApiStore.java

API IOC 大仓库

代码的方式流程图

  • 请求参数说明:

名称类型描述methodstring方法名称paramterjson业务参数timestamplong请求时间戳

  • 实现技术:
  1. java servlet
  2. spring Ioc
  3. Json 转换工具的使用

接口安全的业务需求

  • 接口安全级别分组
  1. 黑名单组

我的,账户信息

  1. 白名单组

商品展示,商品列表

3.黑白名单组

商品详情内的展示,已登录和未登录之间的区别

  • 基于Token安全机制认证要求
  1. 登录鉴权
  2. 防止业务参数串改

fiddler抓包工具。可以实现。

  1. 保护用户敏感信息

用户Id,在网络上是不进行传输的,都是用token来代替

  1. 防签名伪造

客户端和服务端都有一套token和Secret的,传输的时候不是用secret传输,是的签名

  • Token 认证机制整体架构

整体架构分为Token生成与认证两部分:

  1. Token生成指在登陆成功之后生成 Token 和密钥,并其与用户隐私信息、客户端信息一起存储至Token表,同时返回Token 与Secret 至客户端。
  2. Token认证指客户端请求业务接口时,认证中心基于Token生成签名。
  • Token表结构说明:

其实如果token加入索引的话,查询也比较快,但是相对于redis来说肯定是没有redis快的。

  • 业务请求具体参数:

签名规则:

  1. 已指定顺序拼接字符串 secret+method+param+token+timestamp+secret
  2. 使用MD5进行加密,在转化成大写

签名的目的:

  1. 防串改
  2. 防伪造
  3. 防重复使用签名

服务端签名验证的具体流程:

签名认证与API网关的整体认证流程

PS:主要是了解思路,对于性能我建议先别考虑,先实现之后才能谈性能问题,性能问题没有绝对的只有相对的。最主要是签名的获取生成的思路。源码在github上。

看到这里,点了关注吧!

spring gateway 鉴权_通过spring实现service变成controller,代码得到了简化相关推荐

  1. Gateway 整合 Spring Security鉴权

    目录 Spring-Security Spring-Webflux 注意 编码 项目环境版本 gradle 依赖 Spring-Security配置 1. Security核心配置 2.用户认证 3. ...

  2. 鉴权/认证框架Spring Security和Apache Shiro比较

    参考: https://www.cnblogs.com/minxiang-luo/p/12492905.html https://www.javadevjournal.com/spring-boot/ ...

  3. Spring Security 鉴权流程

    如果对该文章感兴趣欢迎关注我的小博客 Forest,我会分享更多学习时遇到的知识 (●'◡'●) 参考资料 SpringSecurity原理剖析与权限系统设计 SpringSecurity动态鉴权流程 ...

  4. spring security鉴权

    1.SpringSecurity 鉴权 - [重点] RBAC 基于角色访问控制 Role-Based Access Control组成部分:RBAC模型里面,有3个基础组成部分,分别是:用户user ...

  5. java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...

    作者:tomsun28 来源:SegmentFault 思否 写在开头 看了看这个专栏的最近一篇文章已经是两年前了,时间过得好快.应该是出学校后时间就很快了.两年前因为用shiro后,自己就按着想法开 ...

  6. api postmain 鉴权_认证鉴权与API权限控制在微服务架构中的设计与实现(一)

    引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现. 1. 背景 最近在做权限相关服务的开发, ...

  7. boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...

  8. springcloud 微服务鉴权_我对微服务、SpringCloud、k8s、Istio的一些杂想

    一.微服务与SOA "微服务"是一个名词,没有这个名词之前也有"微服务",一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微 ...

  9. java观察者模式在spring中的应用_利用spring自己实现观察者模式

    利用spring,自己实现的一个观察者模式,写着玩玩,目的是为了加深理解,下次用Spring自带的玩一玩. 首先我们定义一个侦听类接口 package com.hyenas.common.listen ...

最新文章

  1. 谷歌机器智能大牛:AI模型要真正理解人类语言,关键是「序列学习」
  2. 在Linux中制作实用程序(MakeFile)
  3. 迁移分支_资料 | 迁移学习简明手册
  4. 搜狗服务器页面找不到了怎么办,处理搜狗浏览器提示“无法解析服务器的DNS地址”的方法...
  5. 面向对象编程(六):数据封装
  6. Navicat 解决方案之ORA-28547
  7. NOIP2001题目汇总
  8. Mac下如何将 GBK 编码的文档转成 UTF-8 编码的?
  9. DSPE-PEG-cRGD,磷脂-聚乙二醇-环肽RGD,靶向穿膜肽RGD环肽供应
  10. [青少年CTF]misc-Simpleness writeup by q1jun
  11. 蓝桥杯2014省赛——猜年龄(Java)
  12. MFC/VC++中怎样将一个位图添加到数据库中并且将其读出来到指定的Picture控件上
  13. 这40个冷知识,据说只有1%的人知道……颠覆你的认知!
  14. 自然语言处理在电商的技术实践
  15. 数据结构与算法:树 二叉树入门(一)
  16. 长尾分布,重尾分布(Heavy-tailed Distribution)
  17. ddr2是几代内存_教你区分DDR1 DDR2 DDR3内存条的方法
  18. android canvas广告牌,亚马逊广告后台创建CPC站内广告教程
  19. 【Springboot】录屏功能实现
  20. 在anaconda中配置虚拟环境教程

热门文章

  1. java打印数组_Java中打印数组内容的方式有哪些?
  2. python并行计算numpy_【Nature文章摘录】NumPy: 从单机到分布式并行计算
  3. python中字母大小顺序,如何在Python中按字母顺序对unicode字符串排序?
  4. 在WordPress文章中插入表格的四种方法,史上最全
  5. flask需求文件requirements.txt的创建及使用
  6. ZRender实现粒子网格动画实战
  7. Mac下安装event库
  8. CentOS SSH公钥登录问题
  9. xcode-select: error: tool 'xcodebuild' requires Xcode错误解决方法
  10. C++使用Json作为数据包装格式的通信