若依前后端分离项目白名单支持携带参数

若依前后端分离项目白名单支持携带参数

Laughing
2025-04-03 / 0 评论 / 16 阅读 / 搜一下 / 正在检测是否收录...

m90o3sg9.png

RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。

若依前端框架通过permission.js文件中的whiteList进行配置的,比如登录、注册登连接,需要能直接跳转,只需要在whiteList中配置上对应的路由即可。

const whiteList = ['/login', '/register']

然后在路由打开前,判断路由是否在白名单内。

m90tqf17.png

但是这个判断逻辑存在一个问题,就是判断方法使用的whiteList.indexOf(to.path),这样如果我们路由携带参数的话,会无法实现,因为参数是动态的,我们无法配置白名单。

为了实现跳转,我们需要替换whiteList.indexOf(to.path)方法,通过正则表达式的方式进行匹配。

增加正则表达式校验方法

utils\validate.js文件中,增加正则校验方法

/**
 * 路径匹配器
 * @param {string} pattern
 * @param {string} path
 * @returns {Boolean}
 */
export function isPathMatch(pattern, path) {
  const regexPattern = pattern.replace(/\//g, '\\/').replace(/\*\*/g, '.*').replace(/\*/g, '[^\\/]*')
  const regex = new RegExp(`^${regexPattern}$`)
  return regex.test(path)
}

修改permission.js

permission.js引入新增的方法,并将原来的whiteList.indexOf(to.path)替换成新方法。

import { isPathMatch } from '@/utils/validate'

const isWhiteList = (path) => {
  return whiteList.some(pattern => isPathMatch(pattern, path))
}

m90u2yvg.png

0

评论 (0)

取消