开发管理信息系统框架是为了帮助开发其他管理系统提供一个模版,通过这个框架可以快速地搭建出各式各样的管理系统,例如高校管理系统、仓库管理系统、宿舍管理系统等等。可以预见,使用框架来构建项目将会是一个友好的趋势。
研究范围:在我们开发的框架中,研究范围是提供出菜单、角色(带有权限)、部门等接口帮助用户进行扩展服务。
技术要求:连接池的最大连接数在25以内、连接池出借连接的最长期限在5s以内 、单个文件的最大上限2mb、单个请求的文件总大小上限10mb、mysql数据库并发量为60、数据库的数据量(当前)是0.23mb。
主要解决的问题有:
(1)在数据库中完善角色、菜单、部门对权限表的整合。
(2)树形数据(父子关系)的构建,以及在前台上detree(Layui)的数据显示。
(3)新添加的菜单、部门等实体的同步更新。
(4)Springboot项目整合Shiro安全框架。
(5)将jar包发布在互联网上。
首先是登陆保护。在登陆时设置验证码作为一种被动防御的对策,削弱了一定的恶意攻击。此外,使用了Shiro的登陆认证功能,将登陆信息封装成令牌token,在Shiro的管理下加密登陆。
第二是欢迎界面。在首页处实时地将秒级时间和设定的公告内容展现出来,供客户查看或者催促客户完成某些任务。
第三是具备核心功能,即信息系统的构造。我们完成了对权限、菜单、部门、用户、角色的增删查改。在本系统中我们实现了对菜单、权限、部门可视化的树形格式,用户在对内容更新后,树形结构将同步改变。在Shiro的管理下,普通用户和一般管理者对这些内容由于权限的限制是不能被展示的、不能响应操作。
第四是功能拓展。我们做了登陆日志以及公告管理。访问登陆日志是超级管理员权限下的功能,内容有登陆用户名、登陆IP、与登陆时间。这些相关信息在request对话和Shiro的三大对象之一的subject(当前登录用户)拿到。
第五是导出数据。在layui提供的模版中,通过将其整合项目当中,表格信息可以通过excel或者csv(测试时可以使用)格式导出,同时也可以响应打印。为办公提供便利。
我负责的内容是:shrio整合、前后端的权限管理、菜单管理、日志管理。
用户登录提交的数据先交给Shiro中subject认证,在认证后通过数据库规定的内容对用户授与不同的权限,具备权限的用户只能够访问其权限所约束的内容。
在登录时,在Shiro内可以拿到用户登陆名、从当前request对话中可以拿到IP,保存在日志表当中。
当用户退出时,返回到shiro设定的登出url,即登陆页面。
视图是虚拟表,其内容由查询定义。视图和基表的数据变化会相互影响。MySQL可以使用多用户,MySQL中的用户都存储在系统数据库mysql的user表中,可以新建一个用户,让他只能看到某一个视图(View)。
采用shrio安全框架进行权限管理。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。url拦截:将系统操作的每个url配置在权限表中,将权限对应到角色,将角色分配给用户,用户访问系统功能通过Filter进行过滤,过滤器获取到用户访问的url,只要访问的url是用户分配角色中的url则放行继续访问。
设计过程:在项目设定之初,将项目设定为十大功能,分别为用户管理,部i门管理,部门用户管理,角色管理,角色用户管理,权限管理,角色权限管理,菜单管理,日志管理,公告管理。
数据库共设计了四个主表分别为用户表、部门表、权限表与角色表。两个分离表:日志表和公告表。两个从表:角色用户表,角色权限表。从表主表间由外键连接。Id属性是主键,唯一确定一条记录,并设置自增属性。pid属性实现上下级关系。
对于用户头像存储上,采用的是存储路径的方式而不是存储二进制形式,减少内存消耗。在权限表中存着两种形式(type)的内容,即操作权限与菜单,设置了接口(href),为的是以后拓展菜单并完成点击请求功能。Open字段展示了是否展现子树内容。用户表的salt字段是md5盐值加密的盐,增强加密效果。
通过用户角色表,角色权限表两从表,进行对于用户表,角色表,的权限管理,进行角色与用户分配设置,进行对于角色与用户的匹配,同时权限表信息的连接,实现对于用户,角色,权限这三者信息的匹配与串联,将权限设置与角色分配进行一一匹配,以此三层架构实现对于整个程序功能以此完成对于数据信息的实时性更新,确保信息的串联性。
通过日志表,公告表实现对于用户登录的记录记忆在后台首页公告的展现。
权限表:
sys_permission(id,pid,type,title,percode,icon,href,target,open,ordernum,available)
用户权限表:sys_role_permission(rid,pid)
角色表:sys_role(id,name,remark,available,createtime)
用户角色表:sys_user_role(uid,rid)
用户表:
sys_user(id,name,loginname,pwd,address,sex,remark,deptid,hiredate,mgr,available,ordernum,type,imgpath,salt)
负责的内容有:将shiro整合在项目中、权限与菜单表的设计、权限与菜单管理、日志管理以及对网页中的某些加上权限、将项目发布在互联网上。
引入Shiro依赖后,需要对subject、securityManager、realm三大组件进行配置。完成登录认证、授予用户权限、密码加密的功能。其中Shiro要与mybaits进行整合,主要是能够获取到数据库中用户身份信息数据,能够与当前登陆用户进行信息匹配。
Shiro需要与themleaf进行整合,引入shiro和themleaf的命名空间,添加shiro:hasPermission标签,能够完成拥有不同权限的人的界面显示。
Shiro登陆认证的流程如图所示。
权限管理和菜单管理主中树形结构的展示与更新。在数据库方面,设置了id与pid(父级id),确定从属关系。在后台中设置了树的数据结构,简化了数据处理。Layui的detree控件用来渲染来自后台的数据,友好地展示出菜单和权限的上下级关系。
权限管理与菜单管理在Controller层接收对菜单、权限增删查改的请求,将处理后的数据传回前台。完成了基本的三层架构内容。因为使用了mybatisplus框架,通过写入注解,减少了对service与dao层的代码量。
用户登录提交的数据先交给Shiro中subject认证,在认证后通过数据库规定的内容对用户授与不同的权限,具备权限的用户只能够访问其权限所约束的内容。此外在登录时,在Shiro内可以拿到用户登陆名、从当前request对话中可以拿到IP,保存在日志表当中。
在项目前端html里添加shiro认证权限的标签。将shiro整合到项目中需要对themleaf整合。为了让不同用户收到权限的约束,需要在某些标签里添加shiro:hasPermission=“权限字符串名”,这样不同用户登陆所能访问的内容就不同。
将项目发布在互联网上。因为是maven项目,先在pom文件引入打包成jar包的依赖,在maven生命周期处clean->package生成jar包。由于springboot内嵌tomcat服务器,不需要配置tomcat,因此不用受目录限制。将生成的jar包复制在之前买过的服务器的某个目录,在命令行下写java -jar baoname.jar,等待命令完成。发布过程中出现了无法加载主类问题的问题,通过查阅资料,修改了配置文件,解决了问题。成功发布在互联网上。
发布成功如图所示。
我负责菜单、权限、日志管理这三个关键功能,下面从三者开始介绍
因为界面组件式分布,我负责的内容是其中一个组件,在其中又分为左右两个组件。如下图6.1所示:
图 6.1
左侧组件主要使用layui中detree的控件,对节点点击绑定事件,前台发出加载树形数据请求,后台处理后返回数据,利用detree渲染出菜单树形图。代码如图6.2所示。
图 6.2
添加:设置弹出层,主要是添加时选择父级菜单、权限。如图6.3所示:
图 6.4
(1)dao层与service层
由于使用了Mybatisplus,简化了对dao和service层的代码量。使用mybatisplus,就需要Mapper层的代码继承BaseMapper,services接口继承了IService,实现了菜单实体的增删改查的那些业务逻辑。
(2)controller层
在controller层实现了接口,完成的任务有:返回表格数据,增删查改的数据响应,检查当前菜单是否有子菜单以及加载排序码。
·加载左边树数据实现
图 6.5
图 6.6
菜单管理与权限管理实现起来是类似的。报告将不记录重复的内容。
图 6.7
左侧主要使用layui中detree的控件,对节点点击绑定事件,前台发出加载树形数据请求,后台处理后返回数据,利用detree渲染出权限树形图。
因为是要给各个菜单赋予访问权限,左侧树形结构与数据与菜单管理一致,但点击事件产生的效果是不一样的,在权限管理中树节点点击事件是在右侧展示节点及子节点具备的权限,而菜单管理是展现子菜单。
右侧是权限管理的核心,负责权限的查询、删除、编辑、添加业务。下面展示删除、编辑业务
图 6.10
(1) dao层与service层
由于使用了Mybatisplus,简化了对dao和service层的代码量。使用mybatisplus,就需要Mapper层的代码继承BaseMapper,services接口继承了IService,实现了权限实体的增删改查的那些业务逻辑。
(2) controller层
在controller层实现了接口,完成的任务有:返回表格数据,增删查改的数据响应,检查当前权限是否有子权限,以及加载排序码。
·加载表格数据
使用mybaitisplus条件构造器QueryWrapper设置选择条件。
图 6.11
·更新权限。
ResultObj装载的是相应信息,如成功、失败
图 6.12
日志管理与权限管理实现起来是类似的,但不用展示树形结构。报告将不记录重复的内容。
主界面采取组件式分布如下图所示,对范围最大的组件进行操作:
图 6.13
日志管理的核心,负责日志的查询、删除、编辑业务。下面展示查询业务
查询实现了模糊查询、关联查询。如上图所示,登陆IP输入222,查询到了相关内容。
(1)dao层与service层
由于使用了Mybatisplus,简化了对dao和service层的代码量。使用mybatisplus,就需要Mapper层的代码继承BaseMapper,services接口继承了IService,实现了日志实体的增删改查的那些业务逻辑。
(2)controller层
在controller层实现了接口,完成的任务有:返回表格数据,批量删除和单条信息删除。
·添加日志
图 6.14
·批量删除
使用list集合拿到要删除的日志id集合,作为参数传给service层的批量删除方法。
图6.15
系统信息系统框架初步完成了所要求的八大管理:用户管理、部门管理、部门用户管理角色管理、角色用户管理、权限管理、角色权限管理、菜单管理。并添加了日志管理与公告管理作为补充。
特色:使用Shiro做安全管理与权限认定,使用layui给界面进行美化,用将数据渲染成树形结构并对节点绑定事件。将项目发布在互联网上,满足互联网客户的管理需求。
信息管理系统已上传至百度云,里面有数据库文件,想要看的小伙伴可以跳过去哈 (20r download),链接如
百度云链接: https://pan.baidu.com/s/1C6tQ_BdYKgCrullAFL4row?pwd=ddf5.
链接: https://pan.baidu.com/s/1C6tQ_BdYKgCrullAFL4row?pwd=ddf5 提取码: ddf5 复制这段内容后打开百度网盘手机App,操作更方便哦
1.致敬开源的那些前辈、博主。
2. 计算机专业的同学要记录一下自己的学习经历。
3.向先进学习!