黑名单管理(2)--路由以及页面导航栏设置

7 阅读3分钟

一、待实现功能

要将“黑名单管理”的模块放置在左侧系统管理的导航栏下。

二、问题现象

我在前端的router/index.js内,对黑名单管理进行全局路由配置,但是发现黑名单管理的模块总是和系统管理平级。但是黑名单管理的页面显示内容一切正常。

三、排查过程

1、查看全局路由

查看前端的router/index.js全局路由配置文件,发现只有dashboard配置,没有单独的子路由项。子路由也没有定义在children内。片段如下:

{
  path: '',
  component: Layout,
  redirect: 'dashboard',
  children: [  
    {
      path:'dashboard',
      component:()=>import('/views/index'),
      name:'dashboard',
      meta:{
        title:'dashboard',
        icon:'dashboard' ,
        affix:true
      }
    }
  ]
}

2、查看子路由定义文件

前端查看router/modules包,尝试查看是不是子路由项放在单独的文件里,这里只是引用。结果没有发现。

3、全局搜索关键字

Edit--Find--find in path全局搜索“短信模版配置”关键词,前端全部查不到。

4、动态路由配置

怀疑是动态路由,由后端定义并返回路由数据给前端,前端只负责接收和装配展示。

动态路由:前端路由表只包含基础路由(如登录、首页),其他业务模块的路由会在用户登录后,根据后端返回的权限数据动态添加。

如何判断是否为动态路由?

打开 src/permission.js,看看里面是否有 router.addRoutes 或 router.addRoute 的调用。 查看 store/modules 下是否有 permission.js 或 menu.js,里面可能存储了从后端获取的菜单/路由数据。 搜索关键词:getRouters、getMenu、addRoutes,看是否有调用后端接口获取路由的代码

在前端src/permission.js找到了 router.addRoutes 的调用,是根据用户权限动态添加可展示菜单。 查看 store/modules 下 permission.js,里面存储了从后端获取的菜单/路由数据,但是只有相关变量定义和简要的处理逻辑,并没有具体的方法实现内容。

5、接口调用排查

因为之前遇到过类似的只有方法调用,找不到方法定义的问题,后来发现是用了feign进行远程接口调用,隐藏了方法定义。所以联想到这个可能,因此想着先找到初始化导航栏的方法,再逐步排查。

开启页面,F12开发者模式,刷新首页。抓到一个接口queryAllMenu。找到他的实现类,实现类逻辑:

先获取当前用户的token并且解析出用户名,然后根据token调用getMenuUrl()接口,从url里的resources获取到对应的功能菜单列表对象并返回。

所以现在问题就变成这个getMenuUrl()接口是什么?它获取到的数据长什么样?

点击getMenuUrl()方法,跳转到一个Bean类,上面有一个注解:

@ConfigurationProperties(prefix="auth-center") ,表明 URL 来自配置文件(如 application.yml)

一翻application.yml,明明白白写了auth-center:一串网址。

ok,就是feign远程调用。

四、解决方法

由于我是实习生,没有权限看到完整的代码,再加上网址需要拼接上token才能够用postman进行测试,我头实在大,所以打算直接调用这个远程接口,在获取到的数据后拼接上我想要的黑名单管理的路由后返回给前端。

启动断点调试,刷新页面后发现接口返回一个List<Map<String,Object>>对象,每个菜单项是一个Map,里面有一些id、name等等的属性。

所以我打算手动添加Map对象。我按照List数据的格式补充黑名单管理的属性,把它作为Map装配到List内。ok,黑名单管理成功出现在系统管理下面。