1 Star 1 Fork 0

Roby&奋斗码农 / glory-admin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Glory-Admin

GloryAdmin是一个基于springboot2.1.9.RELEASE 和vue-admin-template搭建的后台框架;

GloryAdmin使用基于角色的权限管理。角色树是一个以“系统管理员”为根节点的树,权限树是由多个子权限树组成。“系统管理员”拥有所有权限;非系统管理员角色可以查看当前角色和直属下级角色的信息,但只能增删改直属下级的角色的信息(直属下级:A是B的直属下级,则A必须为B的孩子节点)。

技术说明

项目 技术
后端项目 springboot
前端项目 Element UI & Vue.js
数据库 MySQL
缓存 Redis

演示

系统架构

项目启动

数据库安装

本项目使用mysql数据库,可以使用数据库脚本创建2个数据库 multi_module_db multi_module_db_01

项目启动

后台启动,使用28081端口

前端启动,使用9523端口

打开浏览器访问 http://localhost:9523 admin a123456

数据库

为什么要数据拆分?什么是分库分表?什么是分布式数据库?

分库分表或者 sharding 的本质是摩尔定律的失效,将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景。

单数据库不能支撑现有的业务,因此出现了分库分表,使用多个数据库进行数据存储。分库分表简单理解就是一个篮子里面装的东西有限,影响了查找效率和容量,把篮子里面的东西分成N份,装到不同的篮子里面。从而打破容量限制,提高查询效率。

然后我们说一下分布式数据库,国内比较流行的有腾讯的TDSQL、阿里的OceanBase,PolarDB、华为的GaussDB等。基本上都是自主研发,强一致高可用、全球部署架构、分布式无限水平扩展、高性能,千亿条记录、数百TB数据上的跨行跨表事务(为祖国点赞)。分布式数据库隐藏了数据库分库分表的策略,智能的进行数据的分库分表,使用起来就像操作一个数据库一样。

分布式数据库数据流操作流程图

Flyway数据库的版本控制

数据库缓存层cacheDao

由于内存操作和磁盘操作根本不是一个量级的,所以在大的项目中都需要对 磁盘型的数据库内存型的缓冲层,将磁盘数据缓存到内存中。数据缓存层用于缓存整个数据层的数据,加速站点访问速度。本项目使用 AOP技术Redis内存数据库 做数据缓存层。详细请自行查看代码 com/spring/common/aop/CacheDaoAspect.java

分库分表

本项目使用sharding JDBC处理数据库的分库分表。根据业务场景,自行拆分数据。

通常项目都只有一个数据库,国内用的比较多的是阿里云的druid做数据库的连接池。本项目使用mysql,druid,sharding JDBC。数据分库分片的原理,在程序里面维护多个数据库连接池,每个数据库连接池对应一个数据库。分库分表使用基于 XA 协议的两阶段事务处理。配置路径com.spring.common.config.shardingJDBC

数据分片的拆分方式又分为垂直分片和水平分片

垂直拆分:按照业务拆分的方式称为垂直分片,又称为纵向拆分。按照业务将表分布到不同的数据库中,从而将压力分散至不同的数据库。

水平拆分:不关心业务逻辑分类,而是通过某张表的某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中。这里的规则,涉及到的算法,我们称为分片算法

常用分片算法

以下内容取自shardingJDBC文档

  • 精确分片算法

对应 PreciseShardingAlgorithm,用于处理使用单一键作为分片键的 =IN 进行分片的场景。需要配合 StandardShardingStrategy 使用。

  • 范围分片算法

对应 RangeShardingAlgorithm,用于处理使用单一键作为分片键的 BETWEEN AND><>=<=进行分片的场景。需要配合 StandardShardingStrategy 使用。

  • 复合分片算法

对应 ComplexKeysShardingAlgorithm,用于处理使用多键作为分片键进行分片的场景,包含多个分片键的逻辑较复杂,需要应用开发者自行处理其中的复杂度。需要配合 ComplexShardingStrategy 使用。

  • Hint分片算法

对应 HintShardingAlgorithm,用于处理使用 Hint 行分片的场景。需要配合 HintShardingStrategy 使用。

后端

权限设计

  1. 用户登陆获取token,存储到本地(adminLogin)

  2. 用户发送token获取用户信息和权限信息,存储到store里面。由于F5会导致store丢失,因此前端请求添加了拦截器,如果没有用户信息和权限信息就重新获取用户信息和权限(getAdminInfo)

  3. 这里返回的是用户所有的权限而不是角色,用户动态生成前端路由

    asyncRoutes为动态生成的权限,如果用户的权限和路由的权限对应,则显示;

项目结构

  1. common:数据操作,数据缓存,事务操作

  2. admin只做controller,用于处理用户请求和后台业务之间的转发。(why这样设计呢?)because有些中间件系统需要用RPC框架做请求转发,because有些机密系统不屑于用springMVC而是选择vertx自主开发请求层。

Maven使用BOM管理

使用Maven继承管理项目依赖。Modules里面通过dependencyManagement引入依赖并指定版本,子项目继承Modules,引入依赖不需要指定版本

日志记录

全局日志处理

用户操作日志

用户操作日志,采用注解的方法。如果此方法需要记录操作日志,只需在方法名称上面添加**@OperateLog**注解即可。

@OperateLog
@ApiOperation(value = "登出", notes = "登出")
@GetMapping(Route.Admin.adminLogout)
public ResponseDate adminLogout(HttpServletRequest httpServletRequest) {
    AdminInfoDTO adminInfoDTO = AdminTool.getAdminUser(httpServletRequest);
    AdminUser adminUser = adminUserMapper.selectByPrimaryKey(adminInfoDTO.getAdminUk());
    adminUser.setNowToken("log-out");
    int result = adminUserService.updateAdminToken(adminUser);
    return ResponseDate.builder()
            .success(result == 1)
            .build();
}

前端

空文件

简介

GloryAdmin是一个基于springboot2.1.9.RELEASE 和vue-admin-template搭建的后台框架; GloryAdmin使用基于角色的权限管理。角色树是一个以“系统管理员”为根节点的树,权限树是由多个子权限树组成。“系统管理员”拥有所有权限;非系统管理员角色可以查看当前角色和直属下级角色的信息,但只能增删改直属下级的角色的信息(直属下级:A是B的直属下级,则A必须为B的孩子节点)。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/beilutesoft/glory-admin.git
git@gitee.com:beilutesoft/glory-admin.git
beilutesoft
glory-admin
glory-admin
master

搜索帮助