news 2026/9/9 4:52:15

[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi

目录

  1. 前言
  2. 项目背景
  3. 主要改造内容
    • 远程鉴权模块
    • JWT双Token认证机制
    • 游客登录功能
    • 内部服务免鉴权
  4. 技术要点总结
  5. 使用建议
  6. 写在最后

前言

近期在开展基于若依框架的项目时,面临一些特定业务需求,需进行定制化二次开发。在此记录主要改造工作,为有类似需求的朋友提供参考。需强调的是,本模块基于若依项目二次开发,仅作学习用途,不用于盈利。

项目背景

若依作为完善的后台管理框架,在实际项目中常遭遇特殊场景:

  • 多服务架构:主系统采用若依框架,同时存在其他独立部署的下游服务,需统一鉴权。例如,公司有一个核心业务系统基于若依搭建,还有一些辅助的数据分析、文件处理等下游服务,这些服务都要使用主系统的用户鉴权体系。
  • Token管理需求:下游服务采用双Token机制(Access Token + Refresh Token),以提升用户体验。
  • 游客访问:部分场景下,需允许未登录用户进行有限访问。就像一些电商网站,未登录用户也能浏览商品列表,但不能进行下单等操作。
  • 权限精细控制:需对内部服务调用进行特殊处理。

若直接在框架中开发项目固然理想,但由于微服务架构,若强行如此,就必须将鉴权代码复制多份分发到各个微服务中。基于这些需求,开展了一系列改造工作。

主要改造内容

一、远程鉴权模块

1.1 需求场景

项目中存在独立部署的服务,而用户体系需与主系统打通。若每个服务各自维护一套用户权限,管理成本将大幅增加。因此,需实现一种机制,让下游服务能通过网络调用主系统的鉴权接口验证用户权限,如同调用本地服务般便捷,且不改变原先鉴权注解的使用方式。

1.2 实现方案

整体架构如下:

有注解

无注解

通过

失败

下游服务请求

RemoteAuthFilter拦截

检查RemotePreAuthorize注解

提取Token

直接放行

Feign远程调用主系统

主系统验证权限

权限验证结果

继续执行业务逻辑

返回403拒绝访问

1.3 核心组件

新增ruoyi - feign模块,包含以下内容:

组件说明
@RemotePreAuthorize远程鉴权注解,用法与@PreAuthorize一致
RemoteAuthFilterServlet版鉴权过滤器
RemoteAuthWebFilterWebFlux版鉴权过滤器
RemoteAuthFeignServiceFeign客户端,调用主系统鉴权接口
UserFeignService用户相关的Feign客户端(暂未使用)
1.4 使用方式

在下游服务中,使用方式如下:

// 此代码展示了在下游服务的控制器中如何使用远程鉴权注解// 检查当前用户是否具有system:user:list权限@RestController@RequestMapping("/api/data")publicclassDataController{@RemotePreAuthorize("@ss.hasPermi('system:user:list')")@GetMapping("/users")publicList<User>getUsers(){// 业务逻辑,获取用户列表returnuserService.getUsers();}}

下游服务的配置也较为简单:

  1. 启动类增加@EnableFeignClients并且扫描路径包括com.ruoyi.feign.service
  2. 有一个最基本的SpringSecurityConfig配置类来覆盖若依的Security配置,否则可能会被拦截。
// 该配置类用于启动下游服务,并启用Feign客户端@SpringBootApplication@EnableFeignClients(basePackages="com.ruoyi.feign.service")publicclassDownstreamApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DownstreamApplication.class,args);}}
1.5 支持的权限表达式

和原先的使用方式保持一致:

表达式说明
@ss.hasPermi('system:user:list')检查单个权限
@ss.hasRole('admin')检查单个角色
@ss.hasAnyPermi('system:user:add,system:user:edit')检查多个权限(满足其一即可)
@ss.hasAnyRoles('admin,manager')检查多个角色(满足其一即可)

二、JWT双Token认证机制

2.1 需求场景

下游服务的前端(此处称为Contract前端)采用JWT + Refresh Token的双Token机制:

  • Access Token:有效期较短(如30分钟),用于日常API调用。就像你去图书馆借书,短期的借阅证可以让你在一段时间内自由借阅书籍,但有效期一过就不能再借了。
  • Refresh Token:有效期较长(如7天),用于刷新Access Token。它类似于长期的会员证,在短期借阅证过期时,可以用来获取新的短期借阅证。

这样做有诸多好处:

  1. 短期Token泄露风险更小。
  2. 用户不需要频繁重新登录。
  3. Refresh Token可以在服务端主动撤销。
2.2 Token流转流程
数据库服务端前端数据库服务端前端日常API调用Token过期登录请求生成Access Token生成Refresh Token存储Refresh Token返回双TokenAPI请求(Access Token)返回数据刷新Token(Refresh Token)验证Refresh Token生成新Token对更新Refresh Token返回新Token对
2.3 核心实现

新增了JWT工具类,支持:

方法说明
generateAccessToken()生成Access Token
generateRefreshToken()生成Refresh Token
parseToken()解析Token
isAccessToken()判断是否为Access Token
isRefreshToken()判断是否为Refresh Token

同时新增了刷新令牌管理相关的Service:

  • SysRefreshToken:刷新令牌实体类
  • SysRefreshTokenMapper:Mapper接口
  • ISysRefreshTokenService:Service接口
2.4 新增接口
接口说明
POST /auth/refresh刷新Token
POST /auth/guest游客登录
GET /auth/getInfo获取用户信息(适配Contract前端)

三、游客登录功能

3.1 需求场景

某些场景下,希望允许未注册用户访问系统,但仅能进行有限操作,例如:

  • 查看公开数据。
  • 使用基础的分析功能。
  • 体验部分产品功能。
    这就需要游客登录功能。
3.2 实现方式

游客登录流程:

关闭

开启

前端发起游客登录

游客登录开关是否开启

返回错误提示

生成游客用户信息

分配默认游客角色

生成游客Token

返回游客身份信息

核心实现:

  • 游客用户特征:用户名为guest_+ 随机字符串。
  • 默认角色:GUEST角色。
  • 默认权限:只有查看和分析权限。
  • Token有效期:与普通用户一致。
3.3 使用方式

前端调用:

// 游客登录的前端请求示例// 向/auth/guest发送POST请求进行游客登录POST/auth/guest// 响应示例,返回游客相关信息{"code":200,"msg":"操作成功","data":{"user":{"id":"guest_123456","username":"guest_123456","role":"GUEST"},"accessToken":"xxx","refreshToken":"yyy","expiresIn":1800}}

系统配置:

-- 在sys_config表中添加配置,用于控制游客登录功能的开关INSERTINTOsys_configVALUES(100,'用户管理-游客账户','sys.account.guestLogin','false','是否开启游客登录功能','Y','admin',NOW(),'',NULL,'游客登录开关');

四、内部服务免鉴权

4.1 需求场景

某些内部服务之间的调用,如主系统调用下游服务,无需经过完整的用户权限验证。此时需要一种机制来识别并豁免这类请求。

4.2 实现方式

新增内部免鉴权配置,和鉴权中心使用同一个密钥进行比对。可能有人担心安全问题,实际上目前考虑到的风险是内部调用注册中心分发这段网络被劫持,不过若这段网络都被劫持,那需要担心的就不只是密钥泄露问题了。要明白攻防是资源的权衡,并非纸上谈兵,不必钻牛角尖。

# 内部服务免鉴权配置,配置密钥ruoyi:remote-auth:secret:SaltyFishSecretValue

通过特定的请求头或IP白名单来识别内部服务调用,跳过权限验证。

技术要点总结

1. 模块化设计

将远程鉴权功能独立成ruoyi - feign模块,带来诸多优势:

  • 代码结构清晰,各模块职责单一。
  • 其他服务引入使用方便。
  • 便于维护和升级。

2. 兼容性考虑

所有改造都确保与原若依框架兼容:

  • 原有的登录、鉴权方式不受影响。
  • 新功能通过开关控制,可灵活开启/关闭。
  • 下游服务和主系统可独立升级。

3. 安全性考虑

  • 采用Token过期机制。
  • 将Refresh Token存储在数据库,支持撤销。
  • 设置IP白名单限制。
  • 内部服务调用使用特定Token。

4. 用户体验

  • 双Token机制减少登录次数。
  • 游客功能降低使用门槛。
  • 统一的鉴权方式,提供一致的使用体验。

使用建议

1. 生产环境配置

  • 修改JWT密钥为强密钥。
  • 使用HTTPS传输Token。
  • 合理设置Token有效期。

2. 权限管理

  • 定期审查接口权限配置。
  • 严格限制游客权限。
  • 妥善保管内部服务Token。

3. 监控告警

  • 监控Token刷新频率。
  • 记录鉴权失败日志。
  • 设置异常访问告警。

写在最后

以上即为主要改造工作,整体未改变若依框架的核心设计理念,仅在特定场景下进行扩展与增强。若大家有类似需求,可参考这些改造方案,欢迎交流讨论。
下期老样子还是聊聊开发过程中遇到的一些问题。

标签:若依框架、二次开发、远程鉴权、JWT双Token、游客登录、内部服务免鉴权

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 21:19:56

混元翻译模型1.5参数详解:1.8B与7B版本对比

混元翻译模型1.5参数详解&#xff1a;1.8B与7B版本对比 1. 引言 随着全球化进程的加速&#xff0c;高质量、低延迟的机器翻译需求日益增长。腾讯近期开源了其最新的混元翻译模型1.5版本&#xff08;HY-MT1.5&#xff09;&#xff0c;标志着在多语言互译领域迈出了关键一步。该…

作者头像 李华
网站建设 2026/9/1 12:05:07

Qwen3-VL+WAN视频生成:3步打造AI影视工作室,日省万元

Qwen3-VLWAN视频生成&#xff1a;3步打造AI影视工作室&#xff0c;日省万元 引言&#xff1a;当AI遇见影视创作 想象一下这样的场景&#xff1a;你的短视频团队刚拿到一个客户需求&#xff0c;需要在3天内完成一条30秒的品牌宣传视频。传统流程需要编剧写脚本、分镜师画分镜、…

作者头像 李华
网站建设 2026/9/2 9:34:02

安装了多个java 如何切换java版本_java9切换java8,零基础入门到精通,收藏这篇就够了

安装了多个java 如何切换java版本 问题描述 平常用的是java8,最近在学习java的新特性。这就需要从java8往更高的java版本切换。由于还在使用java8,测试完新特性后我需要再切换回java8. 如何切换 安装java的时候我们会配置JAVA_HOME这个环境变量.所有要切换java版本,只需要修…

作者头像 李华
网站建设 2026/9/4 7:09:37

Qwen3-VL自动化测试:云端GPU并行跑case,效率翻倍

Qwen3-VL自动化测试&#xff1a;云端GPU并行跑case&#xff0c;效率翻倍 引言&#xff1a;为什么需要云端并行测试&#xff1f; 作为测试工程师&#xff0c;验证Qwen3-VL这类多模态大模型的稳定性是个挑战。传统本地单卡测试不仅耗时&#xff0c;还难以模拟真实场景下的并发压…

作者头像 李华
网站建设 2026/8/22 19:34:01

2026年十大企业商旅平台排行榜,权威解析主流企业商旅平台选型指南

一、行业发展趋势与权威评估体系&#xff08;一&#xff09;2026年企业商旅平台核心发展趋势随着企业数字化转型深化与全球化布局提速&#xff0c;企业商旅平台行业正迈入“数智化管控全链路价值赋能”的新阶段。据艾瑞咨询《2025中国商旅管理行业白皮书》数据显示&#xff0c;…

作者头像 李华
网站建设 2026/9/4 14:12:52

Qwen2.5多模态创作:5个行业应用案例+实现成本

Qwen2.5多模态创作&#xff1a;5个行业应用案例实现成本 引言&#xff1a;为什么企业需要关注Qwen2.5&#xff1f; 在数字化转型浪潮中&#xff0c;传统企业常面临一个核心矛盾&#xff1a;既想拥抱AI技术提升效率&#xff0c;又担心投入成本高、落地效果难衡量。Qwen2.5作为…

作者头像 李华