行业资讯

RuoYi-flowable 安全加固指南:JWT认证、接口权限校验与XSS防护实践

发布时间:2026/8/26 14:29:23
RuoYi-flowable 安全加固指南:JWT认证、接口权限校验与XSS防护实践 RuoYi-flowable 安全加固指南JWT认证、接口权限校验与XSS防护实践【免费下载链接】RuoYi-flowable基RuoYi-vue flowable 6.7.2 的工作流管理 右上角点个 star 持续关注更新哟项目地址: https://gitcode.com/gh_mirrors/ru/RuoYi-flowableRuoYi-flowable 是基于 RuoYi-vue Flowable 6.7.2 的开源工作流管理平台它在标准 RBAC 权限体系之上内置了 JWT 无状态认证、注解级接口权限校验和 XSS 防护过滤器为工作流系统提供了一整套开箱即用的安全加固能力。本文带你从零读懂它的登录认证、接口鉴权与 XSS 防护实践。一、先看登录RuoYi-flowable 认证流程怎么走打开系统登录页login.vue输入账号、密码和验证码后前端会向/login接口发起请求。后端的处理链路如下验证码校验/captchaImage生成的验证码从 Redis 中取出比对防止暴力枚举密码校验由 SysLoginService 调用 BCrypt 比对密码连续输错达到阈值默认 5 次后锁定账号 10 分钟签发 Token认证成功后由 TokenService 生成 JWT 并写入 Redis 缓存返回给前端后续请求携带 Token前端在每次请求头中带上Authorization字段过滤器解析并放行。登录与认证相关的核心配置位于 application.yml例如user: password: maxRetryCount: 5 # 密码最大错误次数 lockTime: 10 # 密码锁定时间分钟这意味着 RuoYi-flowable 在“登录入口”这一层就防住了暴力破解是安全加固的第一道闸门。 当未登录访问受保护接口时系统会返回统一的 401 提示并跳转登录页前端对无权限路由则渲染 404 错误页避免泄露内部路径信息。二、JWT认证无状态 Token 的完整实现RuoYi-flowable 采用 Spring Security JWT 实现无状态认证核心配置在 SecurityConfig 中路径ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java配置项作用SessionCreationPolicy.STATELESS禁用 Session完全基于 Tokencsrf.disable()无状态场景下关闭 CSRF 检查/login、/register、/captchaImage放行登录相关接口匿名可访问anyRequest().authenticated()其余所有接口必须认证默认拒绝真正干活的是 JWT 过滤器 JwtAuthenticationTokenFilter路径ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java它注册在 Spring Security 过滤器链中每个请求都会经过以下逻辑从请求头读取 Token请求头名称由token.header配置项指定通过 Redis 中的缓存校验 Token 有效性并自动滑动续期剩余 20 分钟内访问即刷新过期时间校验通过后将用户身份写入SecurityContext后续业务代码即可通过 SecurityUtils 获取当前登录用户。几个值得新手记住的加固点Token 存 Redis 而非纯本地管理员强制下线、多端登录互斥都能直接操作缓存实现密码使用 BCrypt 强哈希SecurityConfig 中注册了BCryptPasswordEncoder数据库里看不到明文匿名接口显式声明需要匿名访问的接口使用Anonymous注解标记路径ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java由 PermitAllUrlProperties 统一收集放行避免误开“万能后门”。三、接口权限校验一行注解锁定接口权限登录只解决“你是谁”接口权限校验解决的是“你能干什么”。RuoYi-flowable 在控制器方法上使用PreAuthorize注解例如PreAuthorize(ss.hasPermi(monitor:operlog:list)) GetMapping(/list) public TableDataInfo list(SysOperLog operLog) { ... }这里的ss是 SecurityUtils 的 Bean 别名hasPermi会检查当前用户所属角色是否拥有monitor:operlog:list这个权限字符串。整条链路是数据库sys_menu表中的perms字段定义权限标识角色绑定sys_role_menu表把菜单权限挂到角色上用户生效用户绑定角色后即可访问对应接口。前端也做了对称防护v-hasPermi指令路径ruoyi-ui/src/directive/permission/hasPermi.js会在无权限时直接隐藏按钮做到“前端不显示、后端也拒绝”的双保险。对于工作流模块如ruoyi-flowable下的各 Controller同样遵循模块:实体:操作的三段式权限命名新开发接口时照着这个规范命名即可无缝接入权限体系。四、XSS防护过滤器 注解双重拦截XSS跨站脚本是表单类系统的高危攻击面而 RuoYi-flowable 恰好有大量表单流程表单、用户资料、通知公告。它的设计是“过滤器兜底 注解精确控制”全局过滤器 XssFilter路径ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java对所有非 GET/DELETE 请求包裹一层XssHttpServletRequestWrapper对参数值做 HTML 特殊字符转义从根本上让script这类payload失效字段级注解 Xss路径ruoyi-common/src/main/java/com/ruoyi/common/annotation/Xss.java可在校验失败时抛出明确异常并在注解中配置正则白名单排除机制富文本字段如公告正文可通过excludes参数或注解属性跳过过滤避免误伤正常 HTML。配合 XSS 开关配置你可以在不改动代码的前提下快速启停防护。对于工作流场景建议表单设计器vform产出的 JSON 类字段务必保持过滤开启因为流程数据最终会渲染到审批页面上。五、其他安全实践清单 ️除三大主线外项目里还埋了不少值得学习的细节防重复提交RepeatSubmitInterceptor路径ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/配合RepeatSubmit注解基于 Redis 对关键表单接口做幂等保护防止重复发起流程实例登录异常精细化ruoyi-common/src/main/java/com/ruoyi/common/exception/user/下定义了 7 种用户异常密码不匹配、账号锁定、密码过期等前端能给出精准提示操作留痕Log注解 LogAspect 切面记录所有管理操作到sys_oper_log安全事件可审计可追溯上传限制application.yml中限制单文件 10MB、总请求 20MB降低恶意大文件上传风险敏感数据脱敏Sensitive注解支持手机、身份证等字段的 JSON 响应脱敏。六、生产环境安全加固检查清单上线前逐项核对可快速建立安全基线#检查项关键位置1Redis 设置密码避免 Token 被读取application.yml → spring.redis2生产关闭 Swagger/Druid 的匿名放行SecurityConfig 中的 permitAll 列表3缩短token.expireTime配合续期机制application.yml → token4按业务调整密码错误锁定策略application.yml → user.password5富文本接口确认Xss白名单最小化各 Domain 实体字段6为所有管理接口补全PreAuthorize注解各 Controller7全站启用 HTTPS防止 Token 在传输中被窃取Nginx 反向代理层RuoYi-flowable 的安全设计体现了“默认拒绝、层层设防”的思想登录入口防爆破、Token 防伪造、接口防越权、输入防注入、操作可审计。理解了这套组合拳你在任何 Spring 项目里做安全加固都能有章可循。【免费下载链接】RuoYi-flowable基RuoYi-vue flowable 6.7.2 的工作流管理 右上角点个 star 持续关注更新哟项目地址: https://gitcode.com/gh_mirrors/ru/RuoYi-flowable创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考