第四章: 【ruoyi-auth模块】登录功能案例分析

1,722 阅读2分钟

本文主要是分析登录请求 /login 的过程。 调用过程是:【ruoyi-auth模块】 —>【ruoyi-system模块】

原理及流程分析

image.png 1.登录认证即系统登录用户的认证过程。TokenController控制器login方法会进行用户验证,如果验证通过会保存登录日志并返回token,同时缓存中会存入login_tokens:xxxxxx(包含用户、权限信息)。 image.png 2.刷新令牌就是对系统操作用户进行缓存刷新,防止过期。TokenController控制器refresh方法会在用户调用时更新令牌有效期。 image.png

【源码解读】网关如何处理登录请求

登录请求 127.0.0.1:8080/auth/login是特殊的请求,做些过滤操作。 AuthFilter 认证过滤器对需要排除的 uri 地址。例如直接过滤了登录、注册和退出。

image.png

【源码解读】进入控制层controller完成用户登录并生成token返回

image.png

【源码解读】进入服务层service:

image.png 主要包括 2 个部分。

1.用 FeignCilent 从远程服务查询用户信息

我们看一下RemoteUserService的源代码,发现RemoteUserService有一个@FeignClient的注释,说明其实在调用remoteUserService的方法时,会被feign自动转发到ruoyi-system模块中去,比如刚才login方法中调用的getUserInfo方法,其实是去调用了ruoyi-system的/user/info/{username}方法了 FeignClient远程查询用户信息:完整类路径 com.ruoyi.system.api.RemoteUserService url是:/user/info/{username}。 调用服务是: ruoyi-system。 image.png 设置了降级 fallback 处理:RemoteUserFallbackFactory

image.png 小结:

8080是gateway模块监听的地址,gateway模块中再去nacos获取spring.cloud.gateway对应的路径映射规则。如下图所示,nacos的配置是如何被读取到gateway中来的:

image.png

image.png 紧接着就是到auth或者直接到system模块,到auth模块的,其实后续auth也会通过feign来访问system或者其他模块的微服务的。

2. 密码验证

注意: remoteUserService.getUserInfo(username, SecurityConstants.INNER) 的 INNER 指定了该请求是“内部”请求,模块 auth 还会对 inner做处理。 主要是验证“可重试次数”和“密码正确性”

1、验证重试次数(默认如果错误超过5次就锁定 10分钟)

2、验证密码是否与数据库匹配。如登录成功需要清除密码错误次数。注册和验证密码用到的密码验证器要一致。