前言
最近复盘自己之前写的项目,该篇文章主要用来记录项目中遇到的一些问题以及总结。
备注:该项目为软件测试安全管理系统
一、项目的核心功能点
1.权限控制
权限控制主要用来保证不同角色的用户访问到的后台管理页面以及可访问的后端接口是不同的,最大程度来保证数据的安全性。隐私数据只有管理员可以查询到。
当身份验证成功的时候,才可以访问到对应的路由。
- 数据库设计
如果要实现权限控制,涉及到的数据表包括以下6张表结构:
- 用户表
用户表主要记录用户的基本信息 - 角色表
角色表中以自增ID作为主键,以及英文角色以及中文角色名称。 - 菜单表主要是为了后台管理系统所设计的
菜单表,包括前端对应页面的路径信息以及组件信息。由于菜单存在嵌套关系,所以在每条数据中需要有一个parent_id
来表示所对应的父级组件 - 权限表
权限表主要是定义用户可以访问的后端接口 - 用户角色表
每个用户对应的角色信息,该表中使用用户id与角色id作为记录 - 角色权限表
记录每个角色所对应的权限,每个角色可以有多个权限 - 角色菜单表
记录每个角色可以访问的菜单列表,每个角色可以有多个菜单项的访问权限
- 后端
后端实现时,首先使用Shiro框架完成授权、登录以及会话管理等功能。
- 授权:用户拥有访问某一个功能的权限
- 登录:登录主要完成身份的认证,用户如果没有登录的话,就会进行访问拦截,跳转到登录页面,直到登录成功为止。
- 会话管理:会话管理主要用来判断当前用户的一个登录状态,当用户已经登录的情况下,将用户信息保存在session中。服务器端向session中存储信息,使用的是
session.setAttribute(user,json)
;session一般是在当前的浏览器关闭之后,session就会失效。
- 前端
在前端页面的设计中,通过前置守卫完成路由的控制,对访问的页面按照是否已经完成身份的认证来确认时候可以访问页面。
router.beforeEach((to, from, next) => {
/* to就是我们的路由路径*/
window.document.title = to.meta.title;
/* 如果当前用户已经登录,并且下一步要访问的路由是后台管理系统*/
if (store.state.user.username && to.path.startsWith('/admin')) {
// 检测用户身份认证是否成功
axios.get('/authentication').then(resp => {
initAdminMenu(router, store)
})
}
/* 所访问的路由是否需要进行拦截*/
if (to.meta.requireAuth) {
if (store.state.user.username) {
axios.get('/authentication').then(resp => {
if (resp) next()
})
} else {
next({
path: '/loginTest',
query: {
redirect: to.fullPath
}
})
}
} else {
next()
}
})
2.菜单层级嵌套
该功能涉及到层级嵌套。在设计数据表结构的时候,表中应当包含一个字段可以指向主ID,来表示一种包含关系。在菜单数据表中,定义的表结构如下:parent_id
字段的意思是该条记录的父级组件是,其中0代表没有父级组件。其他的数值都是对应记录的id
。
3.多文件上传
多文件上传涉及到IO操作,包括File以及StringBuffer来完成文件的创建以及文件内容的读写操作。该部分逻辑相对比较复杂。
- 前端相应的配置:
<form action="http://localhost:8443/api/main/upload" enctype="multipart/form-data" method="post">
<input type="file" name="dataList" webkitdirectory mozdirectory />
<input type="hidden" name="path" :value="folderId" />
<el-button type="success" native-type="submit" >上传</el-button>
</form>
4. 项目管理
项目管理是将本地项目上传到云端去完成静态测试,静态测试的主要功能就是对整个项目文件夹的代码规范性去做一个展示。展示的数据包括:某一个文件的某一行存在什么问题,比如某一个变量定义未使用。。。等等或者是一些变量命名规范性问题。
这部分在实现的时候主要是通过java去调用一个PMD工具来完成整个的测试工作,该工具是运行于DOC窗口下运行的,输入就是项目,主要是针对java文件做一个说明,测试完毕,可以输出相应的测试数据。
5. 测试任务发布
测试任务发布的 过程为:如果当前登录的角色是管理员,那么可以为测试人员安排测试任务。那么当测试人员登录系统的时候,会以通知的形式通知该测试用户当前需要执行的任务。
6.在线接口测试
这部分功能主要是完成在线接口测试,包括常规的get以及post接口的测试。
7.测试报告
测试报告通过Echart图表完成测试结果的数据展示以及汇总。
8.个人中心管理
1.个人图像上传
对于图片资源的保存,单独在服务器创建一个文件夹用来保存图片资源,由于本项目中并没有上传到云服务器,所以图片资源存储在本地。个人头像资源通过用户名称进行命名,保存在本地
- 后端接口
总结
以上就是对项目的复盘,只是对一些大致功能的回忆。