博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【web框架】【 Cloud-Admin学习笔记(三)】【ace-gate网关】
阅读量:3949 次
发布时间:2019-05-24

本文共 1414 字,大约阅读时间需要 4 分钟。

Cloud-Admin项目里的api网关项目是ace-gate,采用的是Spring Cloud Gateway组件,对外提供一个统一的api入口,并实现了api鉴权的功能。

从前端项目的配置里可以看到,所有的api请求首先都转到localhost:8765网关服务器

 

1、网关配置

转到ace-gate配置文件,几处主要设置包括:

配置网关注册到注册中心,端口8500

consul:    enabled: true    host: 127.0.0.1    port: 8500    discovery:      healthCheckPath: /actuator/health      healthCheckInterval: 5s      instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}      register: true      enabled: true

api鉴权属性 id: ace-gate, secret: 123456

auth:  serviceId: ace-auth  user:    token-header: Authorization  client:    token-header: x-client-token    id: ace-gate  #不填则默认读取spring.application.name    secret: 123456

 redis和rabbitmq设置

redis:      database: 2      host: 127.0.0.1      jedis:        pool:            max-active: 20  rabbitmq:      host: ${RABBIT_MQ_HOST:localhost}      port:  ${RABBIT_MQ_PORT:5672}      username: guest      password: guest

 

2、拦截器

网关的核心逻辑是在AccessGatewayFilter,它继承GlobalFilter接口并实现filter方法,

 

filter方法核心只做了3件事:

1从request请求拿到访客的user信息
2判断用户是否有权限访问api
3给合法的请求生成一个新的token

 

这个地方,前端用户会传来一个用户的token,后端api鉴权也需要检查客户端的token,很容易让人误解它们是同一个token,但其实它们不是同一个值,虽然它们都是存放在head的Authorization属性

 

用户的token仅做身份认证,api的token由网关负责管理,不对外暴露

 

3、auth认证

翻看认证源码发现,Cloud-Admin没有用第三方组件,自己手动实现了一个基于非对称RSA加密的鉴权模块,

声明AuthServerRunner继承CommandLineRunner接口,

在鉴权服务器启动时,生成鉴权所需的公钥和私钥,并缓存在redis里,

然后用公钥加密,私钥解密

更底层调用JDK的KeyPairGenerator实现RSA非对称加密

 

转载地址:http://ythwi.baihongyu.com/

你可能感兴趣的文章
annotation之@Autowired、@Inject、@Resource三者区别
查看>>
idea启动微服务找不到配置文件
查看>>
Java通过反射机制调用某个类的方法
查看>>
字节跳到面试题
查看>>
Linux查看物理CPU个数
查看>>
Linux学习之网络IO,磁盘io
查看>>
ES7.6.2安装
查看>>
查看jar依赖树
查看>>
idea运行gradle项目
查看>>
es安装ltr插件
查看>>
es插件使用之ltr插件demo体验
查看>>
开源ltr-es-7.6.2代码到本地idea打开出现各种错误总结
查看>>
Requests实践详解&& python通过连接开启https的elasticsearch7 服务器
查看>>
ES查询流程源码解析
查看>>
ldaps与ldap over TLS
查看>>
jvm为什么把-Xms和-Xmx的值设置成一样
查看>>
GC打印日志分析
查看>>
jvm堆模型
查看>>
jvm堆内存分带gc算法对比
查看>>
字符串常量池分布位置
查看>>