【web框架】【 Cloud-Admin学习笔记(三)】【ace-gate网关】

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非对称加密

猜你喜欢

转载自blog.csdn.net/qq_43659174/article/details/84720113