若依(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.java3.3.1getInfo接口修改GetMapping(getInfo)publicAjaxResultgetInfo(){try{LoginUserloginUserSecurityUtils.getLoginUser();SysUseruserloginUser.getUser();SetStringrolespermissionService.getRolePermission(user);SetStringpermissionspermissionService.getMenuPermission(user);if(!loginUser.getPermissions().equals(permissions)){loginUser.setPermissions(permissions);tokenService.refreshToken(loginUser);}AjaxResultajaxAjaxResult.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 用户ID1log.info(getInfo: 未检测到登录用户返回默认admin用户信息);SysUseruseruserService.selectUserById(1L);if(usernull){returnAjaxResult.error(系统未初始化请先执行数据库初始化);}SetStringrolespermissionService.getRolePermission(user);SetStringpermissionspermissionService.getMenuPermission(user);AjaxResultajaxAjaxResult.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{LonguserIdSecurityUtils.getUserId();ListSysMenumenusmenuService.selectMenuTreeByUserId(userId);returnAjaxResult.success(menuService.buildMenus(menus));}catch(Exceptione){// 未登录时使用默认 admin 用户 ID1log.info(getRouters: 未检测到登录用户使用默认admin路由);ListSysMenumenusmenuService.selectMenuTreeByUserId(1L);returnAjaxResult.success(menuService.buildMenus(menus));}}说明需要注入ISysUserServiceAutowiredprivateISysUserServiceuserService;3.4 前端修改路由守卫文件ruoyi-ui/src/permission.js修改内容移除 Token 检查直接获取用户信息router.beforeEach((to,from,next){NProgress.start()to.meta.titlestore.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.length0){isRelogin.showtruestore.dispatch(GetInfo).then((){store.dispatch(GenerateRoutes).then(accessRoutes{isRelogin.showfalserouter.addRoutes(accessRoutes)next({...to,replace:true})}).catch((){isRelogin.showfalsenext()})}).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.showfalserouter.addRoutes(accessRoutes)next({...to,replace:true})}).catch((){isRelogin.showfalsenext()})})}else{next()}})3.5 前端自动设置默认 Token文件ruoyi-ui/src/utils/auth.js修改内容无 Token 时自动设置默认值importCookiesfromjs-cookieconstTokenKeyAdmin-TokenexportfunctiongetToken(){// 无 token 时返回默认值跳过登录验证lettokenCookies.get(TokenKey)if(!token){tokenadmin-token-defaultCookies.set(TokenKey,token)}returntoken}3.6 前端静默处理 401 响应文件ruoyi-ui/src/utils/request.js修改内容移除 401 响应的弹框提示if(code401){// 已关闭登录验证静默处理 401不弹框不重定向returnPromise.reject(newError(msg))}四、问题排查记录问题 1访问首页仍然跳转登录页原因后端已放行但前端permission.js仍在检查 Token无 Token 时强制跳转/login。解决修改permission.js移除 Token 检查逻辑。问题 2提示无效的会话或者会话已过期请重新登录原因后端getInfo接口调用SecurityUtils.getLoginUser()时无登录用户抛异常返回 401前端request.js拦截 401 后弹框提示。解决后端getInfo和getRouters增加 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自动设置默认 Token5ruoyi-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七、注意事项此方案仅适用于演示/内部环境生产环境请勿使用关闭登录验证后所有接口对外暴露需注意数据安全若后续需要恢复登录功能需回滚所有修改确保数据库中存有 admin 用户ID1否则getInfo降级逻辑会报错以上为完整的取消登录验证实施文档所有修改均已在实际环境中验证通过。
若依(RuoYi)管理系统取消登录验证完整指南
发布时间:2026/7/2 1:27:36
若依(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.java3.3.1getInfo接口修改GetMapping(getInfo)publicAjaxResultgetInfo(){try{LoginUserloginUserSecurityUtils.getLoginUser();SysUseruserloginUser.getUser();SetStringrolespermissionService.getRolePermission(user);SetStringpermissionspermissionService.getMenuPermission(user);if(!loginUser.getPermissions().equals(permissions)){loginUser.setPermissions(permissions);tokenService.refreshToken(loginUser);}AjaxResultajaxAjaxResult.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 用户ID1log.info(getInfo: 未检测到登录用户返回默认admin用户信息);SysUseruseruserService.selectUserById(1L);if(usernull){returnAjaxResult.error(系统未初始化请先执行数据库初始化);}SetStringrolespermissionService.getRolePermission(user);SetStringpermissionspermissionService.getMenuPermission(user);AjaxResultajaxAjaxResult.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{LonguserIdSecurityUtils.getUserId();ListSysMenumenusmenuService.selectMenuTreeByUserId(userId);returnAjaxResult.success(menuService.buildMenus(menus));}catch(Exceptione){// 未登录时使用默认 admin 用户 ID1log.info(getRouters: 未检测到登录用户使用默认admin路由);ListSysMenumenusmenuService.selectMenuTreeByUserId(1L);returnAjaxResult.success(menuService.buildMenus(menus));}}说明需要注入ISysUserServiceAutowiredprivateISysUserServiceuserService;3.4 前端修改路由守卫文件ruoyi-ui/src/permission.js修改内容移除 Token 检查直接获取用户信息router.beforeEach((to,from,next){NProgress.start()to.meta.titlestore.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.length0){isRelogin.showtruestore.dispatch(GetInfo).then((){store.dispatch(GenerateRoutes).then(accessRoutes{isRelogin.showfalserouter.addRoutes(accessRoutes)next({...to,replace:true})}).catch((){isRelogin.showfalsenext()})}).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.showfalserouter.addRoutes(accessRoutes)next({...to,replace:true})}).catch((){isRelogin.showfalsenext()})})}else{next()}})3.5 前端自动设置默认 Token文件ruoyi-ui/src/utils/auth.js修改内容无 Token 时自动设置默认值importCookiesfromjs-cookieconstTokenKeyAdmin-TokenexportfunctiongetToken(){// 无 token 时返回默认值跳过登录验证lettokenCookies.get(TokenKey)if(!token){tokenadmin-token-defaultCookies.set(TokenKey,token)}returntoken}3.6 前端静默处理 401 响应文件ruoyi-ui/src/utils/request.js修改内容移除 401 响应的弹框提示if(code401){// 已关闭登录验证静默处理 401不弹框不重定向returnPromise.reject(newError(msg))}四、问题排查记录问题 1访问首页仍然跳转登录页原因后端已放行但前端permission.js仍在检查 Token无 Token 时强制跳转/login。解决修改permission.js移除 Token 检查逻辑。问题 2提示无效的会话或者会话已过期请重新登录原因后端getInfo接口调用SecurityUtils.getLoginUser()时无登录用户抛异常返回 401前端request.js拦截 401 后弹框提示。解决后端getInfo和getRouters增加 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自动设置默认 Token5ruoyi-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七、注意事项此方案仅适用于演示/内部环境生产环境请勿使用关闭登录验证后所有接口对外暴露需注意数据安全若后续需要恢复登录功能需回滚所有修改确保数据库中存有 admin 用户ID1否则getInfo降级逻辑会报错以上为完整的取消登录验证实施文档所有修改均已在实际环境中验证通过。