当前位置: 首页 > news >正文

若依(RuoYi)管理系统取消登录验证完整指南

若依(RuoYi)管理系统取消登录验证完整指南

一、需求背景

在项目部署或演示场景下,有时需要关闭若依管理系统的登录验证功能,让所有用户可以直接访问系统首页,无需输入用户名和密码。

本文记录了完整的实现过程,包括后端配置修改、前端路由调整,以及过程中遇到的各种问题的解决方案。


二、整体方案

采用完全关闭登录验证的方案,涉及以下四个层面:

层面修改内容
后端 URL 级别Spring Security 放行所有请求
后端方法级别关闭@PreAuthorize注解拦截
后端接口兼容getInfo/getRouters接口兼容无登录状态访问
前端路由守卫移除 Token 检查逻辑
前端请求拦截静默处理 401 响应,不弹框

三、实施步骤

3.1 后端:关闭 URL 级别权限控制

文件ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

修改内容:将authorizeHttpRequests中的配置改为全部放行

// 关键配置:所有请求放行authorizeHttpRequests(exchanges->exchanges.anyRequest().permitAll())

同时注释掉sessionCreationPolicy中的STATELESS配置(可选,取决于是否需要 Session)。


3.2 后端:关闭方法级别权限控制

文件ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

修改内容:注释@EnableMethodSecurity注解

// 注释此行,关闭方法级权限检查// @EnableMethodSecurity(prePostEnabled = true, securedEnabled = true)@ConfigurationpublicclassSecurityConfig{// ...}

说明:即使 URL 级别已放行,若@EnableMethodSecurity仍然启用,所有带@PreAuthorize注解的 Controller 方法仍会被拦截,导致业务接口返回"认证失败,无法访问系统资源"。


3.3 后端:兼容无登录状态的接口

文件ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

3.3.1getInfo接口修改
@GetMapping("getInfo")publicAjaxResultgetInfo(){try{LoginUserloginUser=SecurityUtils.getLoginUser();SysUseruser=loginUser.getUser();Set<String>roles=permissionService.getRolePermission(user);Set<String>permissions=permissionService.getMenuPermission(user);if(!loginUser.getPermissions().equals(permissions)){loginUser.setPermissions(permissions);tokenService.refreshToken(loginUser);}AjaxResultajax=AjaxResult.success();ajax.put("user",user);ajax.put("roles",roles);ajax.put("permissions",permissions);ajax.put("isDefaultModifyPwd",initPasswordIsModify(user.getPwdUpdateDate()));ajax.put("isPasswordExpired",passwordIsExpiration(user.getPwdUpdateDate()));returnajax;}catch(Exceptione){// 未登录时返回默认 admin 用户(ID=1)log.info("getInfo: 未检测到登录用户,返回默认admin用户信息");SysUseruser=userService.selectUserById(1L);if(user==null){returnAjaxResult.error("系统未初始化,请先执行数据库初始化");}Set<String>roles=permissionService.getRolePermission(user);Set<String>permissions=permissionService.getMenuPermission(user);AjaxResultajax=AjaxResult.success();ajax.put("user",user);ajax.put("roles",roles);ajax.put("permissions",permissions);ajax.put("isDefaultModifyPwd",false);ajax.put("isPasswordExpired",false);returnajax;}}
3.3.2getRouters接口修改
@GetMapping("getRouters")publicAjaxResultgetRouters(){try{LonguserId=SecurityUtils.getUserId();List<SysMenu>menus=menuService.selectMenuTreeByUserId(userId);returnAjaxResult.success(menuService.buildMenus(menus));}catch(Exceptione){// 未登录时使用默认 admin 用户 ID=1log.info("getRouters: 未检测到登录用户,使用默认admin路由");List<SysMenu>menus=menuService.selectMenuTreeByUserId(1L);returnAjaxResult.success(menuService.buildMenus(menus));}}

说明:需要注入ISysUserService

@AutowiredprivateISysUserServiceuserService;

3.4 前端:修改路由守卫

文件ruoyi-ui/src/permission.js

修改内容:移除 Token 检查,直接获取用户信息

router.beforeEach((to,from,next)=>{NProgress.start()to.meta.title&&store.dispatch('settings/setTitle',to.meta.title)// 访问登录页直接跳转到首页if(to.path==='/login'){next({path:'/'})NProgress.done()return}if(isWhiteList(to.path)){next()return}// 无需 token,直接获取用户角色信息if(store.getters.roles.length===0){isRelogin.show=truestore.dispatch('GetInfo').then(()=>{store.dispatch('GenerateRoutes').then(accessRoutes=>{isRelogin.show=falserouter.addRoutes(accessRoutes)next({...to,replace:true})}).catch(()=>{isRelogin.show=falsenext()})}).catch(()=>{// GetInfo 失败时使用默认 admin 用户store.commit('SET_ROLES',['admin'])store.commit('SET_PERMISSIONS',['*:*:*'])store.commit('SET_ID',1)store.commit('SET_NAME','admin')store.commit('SET_NICK_NAME','管理员')store.dispatch('GenerateRoutes').then(accessRoutes=>{isRelogin.show=falserouter.addRoutes(accessRoutes)next({...to,replace:true})}).catch(()=>{isRelogin.show=falsenext()})})}else{next()}})

3.5 前端:自动设置默认 Token

文件ruoyi-ui/src/utils/auth.js

修改内容:无 Token 时自动设置默认值

importCookiesfrom'js-cookie'constTokenKey='Admin-Token'exportfunctiongetToken(){// 无 token 时返回默认值,跳过登录验证lettoken=Cookies.get(TokenKey)if(!token){token='admin-token-default'Cookies.set(TokenKey,token)}returntoken}

3.6 前端:静默处理 401 响应

文件ruoyi-ui/src/utils/request.js

修改内容:移除 401 响应的弹框提示

if(code===401){// 已关闭登录验证,静默处理 401,不弹框不重定向returnPromise.reject(newError(msg))}

四、问题排查记录

问题 1:访问首页仍然跳转登录页

原因:后端已放行,但前端permission.js仍在检查 Token,无 Token 时强制跳转/login

解决:修改permission.js,移除 Token 检查逻辑。


问题 2:提示"无效的会话,或者会话已过期,请重新登录"

原因:后端getInfo接口调用SecurityUtils.getLoginUser()时,无登录用户抛异常返回 401;前端request.js拦截 401 后弹框提示。

解决

  • 后端:getInfogetRouters增加 try-catch,无登录状态时返回默认 admin 数据
  • 前端:request.js中 401 处理逻辑改为静默处理

问题 3:提示"登录状态已过期,您可以继续留在该页面,或者重新登录"

原因request.js的 401 拦截器中有MessageBox.confirm弹框逻辑,即使后端已修改,若后端未重启仍会触发。

解决:彻底移除 401 响应的弹框逻辑。


问题 4:业务接口提示"认证失败,无法访问系统资源"

原因@EnableMethodSecurity启用了方法级权限检查,URL 放行但@PreAuthorize注解仍在拦截。

解决:注释@EnableMethodSecurity注解。


五、修改文件清单

序号文件路径修改类型
1ruoyi-framework/.../SecurityConfig.java放行所有请求 + 关闭方法级权限
2ruoyi-admin/.../SysLoginController.javagetInfo/getRouters兼容无登录状态
3ruoyi-ui/src/permission.js移除 Token 检查
4ruoyi-ui/src/utils/auth.js自动设置默认 Token
5ruoyi-ui/src/utils/request.js静默处理 401

六、重启服务

所有修改完成后,需要同时重启前后端

# 后端重启(在 IDE 中重新运行 RuoYiApplication 或执行)cd c:\workspace\gitee\side_job\sjrd\yingyan mvn clean package-DskipTests# 前端重启cd c:\workspace\gitee\side_job\sjrd\yingyan\ruoyi-ui npm run dev

七、注意事项

  1. 此方案仅适用于演示/内部环境,生产环境请勿使用
  2. 关闭登录验证后,所有接口对外暴露,需注意数据安全
  3. 若后续需要恢复登录功能,需回滚所有修改
  4. 确保数据库中存有 admin 用户(ID=1),否则getInfo降级逻辑会报错

以上为完整的取消登录验证实施文档,所有修改均已在实际环境中验证通过。

http://www.jsqmd.com/news/1105847/

相关文章:

  • 【单片机毕业设计】基于 STM32 的红外测温报警阈值控制系统设计,基于 GY906 的便携式多点温度采集监测装置开发(014701)
  • 抖音下载器终极指南:5分钟掌握免费批量下载技巧
  • PCF8591与PIC18F2682的I2C通信与混合信号处理实践
  • 模型评测体系:平均分高不代表线上好用
  • KMS_VL_ALL_AIO:5分钟完成Windows和Office永久激活的终极指南
  • 第7篇:数据主权架构的TCO模型:如何向CFO证明“数据不动”更省钱?
  • 工程化工作流 系统设计:工具调用要先定义权限和状态
  • 自动化查询优化评测:平均耗时下降不代表可以上线
  • 第2篇:从“数据集中治理”到“数据原位治理”:DISC架构的治理哲学
  • Python 科学计算仿真系统:三层递进式性能优化实战 NVIDIA GTX 1050 Ti (4GB) + Intel Core i7 (12 逻辑核)
  • 多源像素时序融合渲染,增量网格迭代空间实景
  • Linux 内核调优:不要把所有性能问题都甩给参数
  • Moneta亿汇:从公开信息出发,分析产品理解成本与客户支持
  • QKeyMapper:基于Windows输入拦截与虚拟设备模拟的跨平台输入重映射架构解析
  • 小批量定制非标双叠自锁垫圈,会拖延项目交付吗?
  • 以单目时序张量求解像素纵深,以坐标变换矩阵完成二维升维,以隐式曲面拟合耦合自研渲染管线,构建像素转三维空间完整可复算数学闭环。
  • AI账号管理与数据备份的实战解决方案
  • 系统部署性能调优:延迟、吞吐和显存不能只选一个
  • 云原生工程化部署:GPU 资源别被调度系统浪费掉
  • 文本处理系统评测方法:准确率之外还要看哪些指标
  • Serverless 自动发布:冷启动和可观测性要提前设计
  • 苹果涨价、韩股回调:AI 时代,科技股正在分裂定价
  • 自动化运维中的 工程化:告警降噪要先理解故障拓扑
  • 复盘与重构:我把之前的Shell脚本指南,推翻重写了
  • 基于鸿蒙NEXT ArkTS框架的AI心情日记应用开发实践
  • OpenClaw 你装错了!9个必备Skills + 正确模型搭配,一次搞定浏览器自动化!OpenClaw 新手必备!安装实用Skills,模型选择,浏览器自动化等!
  • 别让监控盲了眼:构建企业级Linux网络“上帝视角”
  • AI 辅助:数据结构工程化:LRU 缓存从题目到生产的差异
  • 开源《企业级 Agent 平台工程》
  • 电脑怎么多开微信?万能多开V5,免费无广!