RuoYi-Cloud 鉴权

一、思路

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

四、参考

介绍 | RuoYi

若依-登录认证+外部鉴权

若依-内部鉴权

### 关于 RuoYi-Cloud 在 Spring Boot 中运行时的常见报错及其解决方案 在使用 RuoYi-Cloud 或其衍生版本(如 RuoYi-Cloud-Plus)的过程中,可能会遇到各种运行错误。以下是针对一些常见的运行问题以及可能的原因分析和解决办法。 #### 1. **Nacos 启动失败** 如果 Nacos 未正常启动,则可能导致整个微服务架构无法初始化成功。这是因为 RuoYi-Cloud 使用 Nacos 来实现配置管理和服务注册功能[^3]。 - **原因**: 可能由于网络连接不稳定或者本地环境中的端口被占用。 - **解决方法**: - 确认 Nacos 是否已正确安装并能够通过浏览器访问 `http://localhost:8848/nacos`。 - 如果确认端口冲突,请修改 Nacos 配置文件中的监听端口号,默认为 `application.properties` 文件下的 `server.port=8848`。 #### 2. **ruoyi-modules-file 模块运行报错** 当尝试运行 `ruoyi-modules-file` 模块时可能出现异常情况。 - **原因**: 此类问题通常由依赖库缺失、数据库表结构不匹配或外部存储路径不可用引起。 - **解决方法**: - 检查 Maven 构建过程中是否存在警告或错误日志; - 对照官方文档验证数据库脚本是否完全执行完毕; - 修改 application.yml 文件中关于文件上传目录的相关设置,确保该路径存在且具有读写限。 ```yaml file: path: D:/ruoyi/uploadPath/ ``` #### 3. **Redis 缓存相关问题** 对于多终端登录控制逻辑,在 Redis 数据处理环节容易出现问题[^4]。 - **现象描述**: 用户登出后其他设备仍保持在线状态;强制踢除某用户会话无响应等情况。 - **根本原因**: Redis key 命名规则不符合预期设计,或是 token 更新机制存在问题。 - **修复建议**: - 调整 redisTemplate 的序列化方式以支持复杂对象存储与检索操作; - 完善 TokenService 类内部函数定义,增加对非法请求的有效拦截措施。 ```java // 示例代码片段:TokenService.java public void logout(String username){ String userKey = getTokenKey(username); redisCache.deleteObject(userKey); // 清理对应用户的缓存记录 } ``` #### 4. **JWT 认证失效** 部分场景下即使完成了身份认证流程,后续 API 请求依旧提示失败[^2]。 - **潜在风险点**: JwtUtil 工具类生成签名密钥长度不足;header 头部携带参数格式有误等。 - **优化方向**: - 提升 secret 密匙的安全等级至至少 256bit; - 明确规定客户端传递 Authorization 字段的具体形式如下所示: ```bash Authorization: Bearer <access_token> ``` --- ### 总结 上述列举了几种典型的 RuoYi-Cloud 在实际部署调试阶段所面临的技术难题,并给出了针对性较强的应对策略。当然具体实施还需结合项目实际情况灵活调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你喜欢喝可乐吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值