一、思路
1.两个模块
ruoyi-auth:登录认证、退出登录、jwt创建
ruoyi-common-security:鉴权
2.外部鉴权
客户端访问服务端(微服务),jwt令牌,需要登陆,token认证

3.内部鉴权
上游微服务访问下游微服务 请求头标记from-source=inner,不需要token,服务之间的调用
二、外部鉴权
1.登录(JWT创建)
登录 f12 login request url
ruoyi-gateway -> ruoyi-auth -> controller token-> postmapping login
code uuid username password
service login 校验用户名密码、查询用户信息、判断用户状态 ry-cloud sys_user、验证用户名密码、返回用户信息
token加密 tokenservice.java、保存redis
封装返回前端
previw access-token
ui login.vue -> login组件 user.js -> 将信息传给后端,将后端返回值存到前端缓存中,超时销毁
登录成功以后
2.JWT鉴权
登陆成功之后 -> 网关 -> 鉴权 -> 微服务
网关转发微服务,先找目标资源,目标资源的注解转到security,环绕增强 鉴权,通过进入到目标资源的方法中,不通过则转给网关,响应前端
外部鉴权,前置增强
AOP 面向切面编程
common-security JWT令牌
用户管理
list? URL
ruoyi-gateway-dev.yml 无鉴权
system/user/list
modules
controller
SysUserController
/user
/list
RequiresPermissions 自定义的注解 权限验证
rupyi-common-security aspect AOP preauthorizeaspect.java
基于切面的类来实现权限校验
AOP之前用于方法增强,方法之前之后
注解鉴权
pointcut 切入注解 环绕切入
checkMethodAnnotation
getPermiList
getLoginUser
getToken
getPermissions
核对比较权限,鉴权
token
鉴权之后,再进行微服务的请求,返回结果到前端
三、内部鉴权
微服务与微服务之间,上游访问下游,请求头标记from-source=inner
上游服务通过 ruoyi-api 中的 ruoyi-api-system 调用 ruoyi-system 的服务
登录过程中查询用户信息
ruoyi-auth (上游服务)查询用户信息 ruoyi-system(下游服务)
controller TokenController login
怎么调用服务
原来:在需要调用服务的模块中写一个service调用其他服务
微服务:通过ruoyi-api
ruoyi-api
ruoyi-api-system
第三方被其它服务调用的接口
RemoteUserService FeignClient
/user/info/{username}
factory 托底
SysUserController /info/{username}
@InnerAuth
ruoyi-common-security aspect InnerAuthAspect 面向切面编程 @Around