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 修改教程:自定义开发 #### 了解项目结构 Ruoyi-Cloud 是基于 Spring Cloud微服务架构,集成了 Eureka、Gateway、Hystrix、Feign 和 Config 等组件[^1]。为了更好地进行自定义开发,建议先熟悉项目的整体结构。 #### 添加新功能模块 假设要增加一个新的学生管理模块 `ruoyi-system` 中的服务接口 `ISysStudentService.java`,可以按照以下方式进行: ```java package com.ruoyi.system.service; import java.util.List; import com.ruoyi.common.core.mybatisplus.page.TableDataInfo; import com.ruoyi.system.domain.SysStudent; public interface ISysStudentService { /** * 查询学生列表 */ TableDataInfo<SysStudent> selectSysStudentList(SysStudent sysStudent); /** * 新增学生信息 */ int insertSysStudent(SysStudent sysStudent); /** * 更新学生信息 */ int updateSysStudent(SysStudent sysStudent); } ``` 此代码片段展示了如何创建一个简单的 CRUD 接口来操作学生数据表[^2]。 #### 集成分布式事务支持 对于涉及多个数据库的操作场景,推荐引入 Seata 来处理分布式事务问题。可以在 pom.xml 文件中加入如下依赖项以启用该特性: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> </dependency> ``` 通过这种方式能够有效解决跨服务调用时的数据一致性难题[^3]。 #### 存储Token至Redis并实现机制 针对安全性和性能考虑,在登录认证成功后可将 Token 值存储于 Redis 缓存服务器上,并设置过期时间以便自动清理无用记录;同时编写过滤器用于拦截请求验证合法性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值