# CommonAdmin **Repository Path**: caochenlei/common-admin ## Basic Information - **Project Name**: CommonAdmin - **Description**: CommonAdmin是一个按钮级权限管理系统,包含企业后台最常用的系统模块,代码简洁,开箱即用。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 17 - **Forks**: 2 - **Created**: 2021-07-30 - **Last Updated**: 2025-02-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目简介 CommonAdmin是一个按钮级权限管理系统,包含企业后台最常用的系统模块,代码简洁,开箱即用。 访问地址:[https://gitee.com/caochenlei/common-admin](https://gitee.com/caochenlei/common-admin) # 主要功能 - ### 登录功能 ![](https://img-blog.csdnimg.cn/img_convert/c666b93db7965c6cc738c82a382033dd.png) - ### 后台首页 ![](https://img-blog.csdnimg.cn/img_convert/e759366a7fed9bebbaf36ba0da63a0cd.png) - ### 错误页面 ![](https://img-blog.csdnimg.cn/img_convert/f89d2e21bf33af52ad28a3f8693c4f25.png) ![](https://img-blog.csdnimg.cn/img_convert/bf3eb609e5a8bde4898425a3dd583d3d.png) - ### 部门管理 ![](https://img-blog.csdnimg.cn/img_convert/645675920329ce8677a652470c006bf8.png) ![](https://img-blog.csdnimg.cn/img_convert/342c81042861bccf6ec931623d460595.png) - ### 用户管理 ![](https://img-blog.csdnimg.cn/img_convert/00e322e3065b9344d035506acf4faf29.png) ![](https://img-blog.csdnimg.cn/img_convert/c635d27e7a2019023c47ee2cd5ce0958.png) ![](https://img-blog.csdnimg.cn/img_convert/0a97d719709b37ea88ddb77d78083548.png) - ### 角色管理 ![](https://img-blog.csdnimg.cn/img_convert/eb108275f16083cfb7c1ad3e22933bad.png) ![](https://img-blog.csdnimg.cn/img_convert/6765f854ebafa979a952ce4d210e951e.png) ![](https://img-blog.csdnimg.cn/img_convert/a375180341d624aff5f9ff3666c53c47.png) - ### 菜单管理 ![](https://img-blog.csdnimg.cn/img_convert/1614464ef43a9476ae23f117d2f87cfc.png) ![](https://img-blog.csdnimg.cn/img_convert/d5a1510f3f81c11afe1b0477395d03f5.png) - ### 日志管理 ![](https://img-blog.csdnimg.cn/img_convert/d803430144612ee6d42300357b67e38f.png) ![](https://img-blog.csdnimg.cn/img_convert/3161ba7f74917937b10a50f8b801617b.png) - ### 系统配置 ![](https://img-blog.csdnimg.cn/img_convert/aa5ff25b0160de46648526783397498d.png) ![](https://img-blog.csdnimg.cn/img_convert/5997d18d2ed8dc9c85b23b964c9c0392.png) ![](https://img-blog.csdnimg.cn/img_convert/fa52d9ec0a32d4c7b0609de4d4dbf311.png) - ### 个人中心 ![](https://img-blog.csdnimg.cn/img_convert/a8d3026c4c6694849dd3c22b94938e14.png) ![](https://img-blog.csdnimg.cn/img_convert/c6b3301188a5db988eb921c3b82360d8.png) # 采用技术 **前端技术栈:** | 技术名称 | 采用版本 | 官方地址 | | ----------------- | -------- | ------------------------------------------------------------ | | vue-element-admin | 4.4.0 | [点击访问](https://panjiachen.github.io/vue-element-admin-site/zh/) | **后端技术栈:** | 技术名称 | 采用版本 | 官方地址 | | --------------- | -------- | ------------------------------------------------------------ | | Spring Boot | 2.5.14 | [点击访问](https://docs.spring.io/spring-boot/docs/2.5.14/reference/html/) | | Spring Security | 5.5.8 | [点击访问](https://docs.spring.io/spring-security/site/docs/5.5.8/reference/html5/) | | MyBatis | 3.5.9 | [点击访问](https://mybatis.org/mybatis-3/zh/index.html) | | JJWT | 0.11.5 | [点击访问](https://github.com/jwtk/jjwt) | | Knife4j | 3.0.3 | [点击访问](https://gitee.com/xiaoym/knife4j) | **开发的工具:** | 工具名称 | 采用版本 | 下载地址 | | ------------------ | --------- | ------------------------------------------------------------ | | IntelliJ IDEA | 2021.1 | [下载地址](https://www.jetbrains.com/idea/download/#section=windows) | | Maven | 3.6.3 | [下载地址](https://maven.apache.org/download.cgi) | | MySQL | 5.7.34 | [下载地址](https://dev.mysql.com/downloads/mysql/) | | Redis | 3.2.100 | [下载地址](https://github.com/MicrosoftArchive/redis/tags) | | Visual Studio Code | 1.58.2 | [下载地址](https://code.visualstudio.com/) | | Node.js | 14.17.1 | [下载地址](https://nodejs.org/zh-cn/) | | Java JDK | 1.8.0_291 | [下载地址](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html) | # 目录介绍 ``` common-admin 前端工程 common-admin-server 后端工程 ``` common-admin目录介绍: ``` ├─plop-templates 模板文件,可以使用npm new来创建,可以用代码生成器代替 ├─public └─src │ App.vue 根组件 │ main.js 入口文件 │ permission.js 权限控制 │ settings.js 全局设置 ├─api │ cloudStorage.js 存放访问后端统一存储接口api │ sysConfig.js 存放访问后端系统配置接口api │ sysDepartment.js 存放访问后端系统部门接口api │ sysLog.js 存放访问后端系统日志接口api │ sysMenu.js 存放访问后端系统菜单接口api │ sysRole.js 存放访问后端系统角色接口api │ sysUser.js 存放访问后端系统用户接口api ├─assets 静态资源 ├─components 组件库 ├─directive 指令集 ├─filters 过滤器 ├─icons SVG图标 ├─layout 后台布局 ├─router 全局路由 ├─store 全局存储 ├─styles 样式库 ├─utils 工具类 └─views ├─dashboard │ index.vue 默认首页 ├─error-page │ 401.vue 401错误页 │ 404.vue 404错误页 ├─login │ index.vue 登录页面 ├─profile │ avatar.vue 头像上传组件 │ index.vue 个人中心 ├─redirect │ index.vue 重定向 └─system ├─config │ cloudStorage.vue 云存储配置组件 │ index.vue 系统配置管理页面 ├─department │ index.vue 系统部门管理页面 ├─log │ index.vue 系统日志管理页面 ├─menu │ index.vue 系统菜单管理页面 ├─role │ index.vue 系统角色管理页面 └─user index.vue 系统用户管理页面 ``` common-admin-server目录介绍:(部分包更换了位置) ``` │ pom.xml 项目依赖 └─src └─main ├─java │ └─io │ └─github │ └─caochenlei │ │ MainApplication.java 主启动类 │ ├─annotation │ │ RedisCache.java 方法缓存注解 │ │ SysLogRecord.java 系统日志注解 │ ├─aspect │ │ RedisCacheAspect.java 方法缓存切面 │ │ SysLogAspect.java 系统日志切面 │ ├─common │ │ Constant.java 全局常量 │ │ Payload.java JWT载荷 │ ├─config │ │ AsyncConfig.java 异步线程池配置 │ │ ImageCodeConfig.java 图片验证码配置 │ │ RedisConfig.java Redis访问配置 │ │ SwaggerConfig.java 接口文档配置 │ │ WebMvcConfig.java 解决跨域配置 │ │ WebSecurityConfig.java 登录/权限配置 │ │ WebServerFactoryCustomizerConfig.java 解决Undertow警告配置 │ ├─controller │ │ CloudStorageController.java │ │ SysConfigController.java │ │ SysDepartmentController.java │ │ SysLogController.java │ │ SysMenuController.java │ │ SysRoleController.java │ │ SysUserController.java │ ├─domain │ │ SysConfig.java │ │ SysDepartment.java │ │ SysLog.java │ │ SysMenu.java │ │ SysRole.java │ │ SysUser.java │ ├─dto │ │ SysUserInfoDTO.java 载荷中传输的用户对象 │ ├─exception │ │ AuthTokenException.java Token认证失败异常 │ │ AuthTokenExpiredException.java Token时间过期异常 │ │ CustomAuthenticationException.java 自定义认证失败异常 │ │ ImageCodeException.java 图片验证码失败异常 │ ├─filter │ │ CustomAuthenticationFilter.java 请求验证过滤器(重要) │ ├─handler │ │ CustomAccessDeniedHandler.java 无权限访问处理器 │ │ CustomAuthenticationEntryPointHandler.java无权限访问处理器 │ │ CustomAuthenticationFailureHandler.java 登录失败处理器 │ │ CustomAuthenticationSuccessHandler.java 登录成功处理器 │ │ GlobalExceptionHandler.java 全局控制器异常处理器 │ ├─mapper │ │ SysConfigMapper.java │ │ SysDepartmentMapper.java │ │ SysLogMapper.java │ │ SysMenuMapper.java │ │ SysRoleMapper.java │ │ SysUserMapper.java │ ├─prop │ │ RsaKeyProperties.java 获取RSA公/私钥配置对象 │ ├─service │ │ │ SysDepartmentService.java │ │ │ SysLogAsyncService.java │ │ │ SysLogService.java │ │ │ SysMenuService.java │ │ │ SysRoleService.java │ │ │ SysUserService.java │ │ └─impl │ │ CloudStorageServiceImpl.java │ │ CosCloudStorageServiceImpl.java │ │ KodoCloudStorageServiceImpl.java │ │ OssCloudStorageServiceImpl.java │ │ SysConfigServiceImpl.java │ │ SysDepartmentServiceImpl.java │ │ SysLogAsyncServiceImpl.java │ │ SysLogServiceImpl.java │ │ SysMenuServiceImpl.java │ │ SysRoleServiceImpl.java │ │ SysUserDetailsServiceImpl.java 登录时验证用户/获取权限 │ │ SysUserServiceImpl.java │ │ SysUserTokenServiceImpl.java Token处理服务类 │ ├─utils │ │ FileUtils.java 文件处理操作类 │ │ IpUtils.java 获取客户端请求IP工具类 │ │ JsonUtils.java JSON解析工具类 │ │ JwtUtils.java Token解析/生成工具类 │ │ MakeUtils.java 部门树、菜单树、路由表工具类 │ │ RedisCacheUtils.java Redis缓存工具类 │ │ RegionUtils.java 通过IP地址获取区域工具类 │ │ RsaUtils.java 用于生成RSA公/私钥,用来加密 │ └─vo │ CloudStorageConfigVo.java 回显云存储结果 │ PermissionVo.java 回显前端权限 │ ResultVo.java 回显前端统一处理结果 │ RoleVo.java 回显角色选中项 │ RouterVo.java 回显前端路由表 │ SysUserInfoVo.java 回显前端系统用户信息 │ TokenVo.java 回显前端Token │ UploadVo.java 回显上传文件后结果 └─resources │ application.yml 系统配置 │ banner.txt 启动Banner自定义信息 │ mybatis-config.xml MyBatis配置 ├─mapper │ SysConfigMapper.xml │ SysDepartmentMapper.xml │ SysLogMapper.xml │ SysMenuMapper.xml │ SysRoleMapper.xml │ SysUserMapper.xml └─rsa rsa_key RSA私钥 rsa_key.pub RSA公钥 ``` # 项目安装 ```bash # 导入数据库,注意数据库账号和密码 common-admin.sql ``` ```bash # 克隆项目 git clone https://gitee.com/caochenlei/common-admin.git ``` common-admin-server安装及启动: ```bash # 进入后端 cd common-admin-server # 安装依赖(注:如果实在安装不上,那就试试:更换阿里云仓库地址) mvn install # 运行项目 mvn spring-boot:run ``` common-admin安装及启动: ```bash # 进入前端 cd common-admin # 安装依赖(注:如果实在安装不上,那就试试:cnpm install) npm install # 运行项目 npm run dev ``` ``` 访问地址:http://localhost:9527/ 登录账号:zhangsan 登录密码:123456 ``` # 快速开发 为了能够进行快速开发,可以使用我的另一个开源项目《代码生成器》,我已经内置了一套关于《Common-Admin》的开发模板。 软件下载地址:https://gitee.com/caochenlei/code-builder/releases/v1.0.0 但是一定注意:JDK 8,如果JDK不是8可能不会正常运行。 ![](https://img-blog.csdnimg.cn/1e1c47fe7be946c1be1db692fd2bb9c6.png#pic_center) 如果你想了解代码生成的整个细节,可以使用`CMD`命令行的方式启动。 ```java java -jar CodeBuilder-1.0.0.jar ``` 第一步:获取数据库名,然后选择《common-admin》,最后点击开始生成代码 ![](https://img-blog.csdnimg.cn/713456ab91e844acb53b652f58b64206.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDkwNDU3,size_16,color_FFFFFF,t_70#pic_center) 第二步:修改工程包名,然后选择《Common-Admin》,最后点击一键生成代码 ![](https://img-blog.csdnimg.cn/4328dc6385774493b404a9e905906ae6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDkwNDU3,size_16,color_FFFFFF,t_70#pic_center) 第三步:查看生成代码,然后拷贝到对应前后端工程文件夹,最后保存以后重新启动 ![](https://img-blog.csdnimg.cn/0dae613dd9ab4a889287d70699fa30b1.png#pic_center) # 注意事项 **问题一:前端组件的路径有没有一定规范?** 回答一:有,需要按照《主功能模块名/次功能模块名》这种形式来存放生成出来的views界面,并且需要修改组件名为index.vue。 ![](https://img-blog.csdnimg.cn/5e51713238da4a969714c184cb42b504.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDkwNDU3,size_16,color_FFFFFF,t_70#pic_center) ![](https://img-blog.csdnimg.cn/e3fc6b9e78bc4316ab7d513215be039f.png#pic_center) **问题二:如何实现的按钮级别权限管理?** 回答二: - 后端使用`@PreAuthorize("hasAuthority('sys:department:add')")`注解来控制后端方法的访问权限 - 前端使用`v-if="checkPermission(['sys:department:add'])"`方法来控制按钮是否显示到页面 **问题三:如何生成自己的RSA公/私钥?** 回答三:在工程里新建RsaUtilsTest,然后运行以下代码生成即可。 ```java public class RsaUtilsTest { private String publicFile = "D:\\auth_key\\rsa_key.pub"; private String privateFile = "D:\\auth_key\\rsa_key"; private String secret = "123456789abcdefg"; @Test public void generateKey() throws Exception { RsaUtils.generateKey(publicFile, privateFile, secret, 2048); } } ``` 生成后的文件可以直接替换工程默认的RSA公/私钥,也可以在application.yml中配置指定路径。 **问题四:系统关于时间类型的处理?** 回答四:系统后端所有时间字段需要手动加以下两个注解,代码生成器不会生成,第一个是用于返回前端的格式,第二个是序列化时采用的格式。 ```java @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonSerialize(using = LocalDateTimeSerializer.class) private LocalDateTime createTime;//创建时间 ``` **问题五:系统配置要注意的问题?** 回答五:系统配置中`order_num>0`的配置项默认是通用配置项,而`order_num=0`为存储配置,如果你有其他特殊配置,可以让`order_num`为负数,并且可以在系统配置选项卡增加一个选项,并且自己实现。 **问题六:为什么我配置了云存储,但是上传头像的时候遇到跨域问题?** 回答六:相对应的云存储需要开启跨域配置,默认为"*",可参考:[点击访问](https://blog.csdn.net/weixin_42408648/article/details/112158015) **问题七:@RedisCache注解如何使用?** 回答七:@RedisCache应该运用到查询结果经常不会改变的方法上,方法参数最好是基础数据类型,引用类型也是可以的但是不建议,并且在该方法查询数据对应的修改方法上标注此注解,同时开启`flush = true`功能,以缓存系统配置为例: ![](https://img-blog.csdnimg.cn/ee943c599683448da24cff50bed30273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDkwNDU3,size_16,color_FFFFFF,t_70#pic_center) ![](https://img-blog.csdnimg.cn/06b4c560f4154359b21e2f8a7c447682.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NDkwNDU3,size_16,color_FFFFFF,t_70#pic_center) **问题八:为什么我分配菜单后刷新当前页面,发现没有生效?** 回答八:其实已经生效了,由于组件缓存,所以才没有看到效果,此时只需要`CTRL+F5`强制刷新一下就能看到啦。 如果您有其他的问题,请联系作者或者关注CSDN进行私信。 # 版本说明 - v5.1.0(2022-07-12) - 菜单支持侧边栏显示/隐藏 - 优化SysDialog对话框组件 - 优化数据库脚本默认编码 - 清空日志记录表中的数据 - v5.0.0(2022-07-10) - 升级后端部分依赖版本 - 修复Swagger使用错误 - 更换部分包的现有位置 - 更换 @Resource 注入 - 新增控制方法调用监控 - 增强前端弹窗组件属性 - 增强前端弹窗组件加载 - 增强前端分页大小数量 - 修复菜单创建属性问题 - 修复前端登录失效问题 - v4.0.0 - 切换tomcat - 调整pom - v3.0.2 - 修改接口描述 - v3.0.1 - 优化上传流程 - 优化401页面 - 优化404页面 - 系统部门改为选填 - 验证码区分大小写 - v3.0.0 - 新增401错误页面 - 新增404错误页面 - 支持用户多角色化,去掉分配角色搜索 - 新增系统部门时自动打开部门列表 - 新增系统菜单时自动打开上级列表 - 前端表格加载提示 - 超级管理员角色不可删除,不可编辑 - 数据库内数据进行了调整 - 修复前端分页的BUG - v2.0.0 - 新增登录背景(默认不开启,需手动开启) - 新增系统配置(通用配置项以及特殊配置) - 新增个人中心(头像上传、修改密码) - 新增通用存储(七牛云(0)、阿里云(1)、腾讯云(2)) - 新增缓存注解(@RedisCache) - 优化登录流程(登录成功弹出提示) - 优化退出流程(退出成功弹出提示) - 优化缓存前缀(验证码、Token缓存统一添加前缀,防止和其它应用冲突) - 修复日志注解(@SysLogRecord在对文件等特殊参数序列化失败的问题) - v1.0.0 - 完成权限控制 - 完成部门管理 - 完成用户管理 - 完成角色管理 - 完成菜单管理 - 完成日志管理 # 联系作者 Email:[774908833@qq.com](mailto:774908833@qq.com) CSDN:[https://caochenlei.blog.csdn.net/](https://caochenlei.blog.csdn.net/)