项目简介
CommonAdmin是一个按钮级权限管理系统,包含企业后台最常用的系统模块,代码简洁,开箱即用。
访问地址:https://gitee.com/caochenlei/common-admin
主要功能
采用技术
前端技术栈:
技术名称 | 采用版本 | 官方地址 |
---|---|---|
vue-element-admin | 4.4.0 | 点击访问 |
后端技术栈:
技术名称 | 采用版本 | 官方地址 |
---|---|---|
Spring Boot | 2.5.3 | 点击访问 |
Spring Security | 5.5.1 | 点击访问 |
Undertow | 2.2.9 | 点击访问 |
MyBatis | 3.5.7 | 点击访问 |
JJWT | 0.11.2 | 点击访问 |
Knife4j | 3.0.3 | 点击访问 |
开发的工具:
工具名称 | 采用版本 | 下载地址 |
---|---|---|
IntelliJ IDEA | 2021.1 | 下载地址 |
Maven | 3.6.3 | 下载地址 |
MySQL | 5.7.34 | 下载地址 |
Redis | 3.2.100 | 下载地址 |
Visual Studio Code | 1.58.2 | 下载地址 |
Node.js | 14.17.1 | 下载地址 |
Java JDK | 1.8.0_291 | 下载地址 |
目录介绍
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过滤器├─iconsSVG图标├─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.javaToken时间过期异常││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.javaToken处理服务类│├─utils││FileUtils.java文件处理操作类││IpUtils.java获取客户端请求IP工具类││JsonUtils.javaJSON解析工具类││JwtUtils.java Token解析/生成工具类││MakeUtils.java部门树、菜单树、路由表工具类││RedisCacheUtils.javaRedis缓存工具类││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└─rsarsa_key RSA私钥rsa_key.pub RSA公钥
项目安装
# 导入数据库,注意数据库账号和密码common-admin.sql
# 克隆项目git clone https://gitee.com/caochenlei/common-admin.git
common-admin-server安装及启动:
# 进入后端cd common-admin-server# 安装依赖mvn install# 运行项目mvn spring-boot:run
common-admin安装及启动:
# 进入前端cd common-admin# 安装依赖(注:如果实在安装不上,那就试试:cnpm install)npm i --legacy-peer-deps# 运行项目npm run dev
访问地址:http://localhost:9527/登录账号:zhangsan登录密码:123456
快速开发
为了能够进行快速开发,可以使用我的另一个开源项目《代码生成器》,我已经内置了一套关于《Common-Admin》的开发模板。
软件下载地址:https://gitee.com/caochenlei/code-builder/releases/v1.0.0
但是一定注意:JDK 8,如果JDK不是8可能不会正常运行。
如果你想了解代码生成的整个细节,可以使用CMD
命令行的方式启动。
java -jar CodeBuilder-1.0.0.jar
第一步:获取数据库名,然后选择《common-admin》,最后点击开始生成代码
第二步:修改工程包名,然后选择《Common-Admin》,最后点击一键生成代码
第三步:查看生成代码,然后拷贝到对应前后端工程文件夹,最后保存以后重新启动
注意事项
问题一:为什么采用Undertow
而不是Tomcat
?
回答一:项目整个的开发环境采用的是主流的JDK 8,在这个环境下,如果我采用最新的Spring Boot,那么Spring Boot内置的Tomcat的版本为9.x,而Tomcat 9.x需要JDK 8及以上的支持,有人会想说,这不版本挺对应的吗,实际上,JDK 8对Tomcat 9.x支持还是有些问题,如果你用DEBUG模式启动后端项目就会发现有几个报错的地方,主要是找不到class文件,因此,我决定更换为Undertow。
问题二:如果我想用Tomcat
应该怎么调整回去?
回答二:找到POM.XML,然后对这段依赖进行修改,将注释下的内容全部删去,此时最好将JDK切换为JDK 11。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- Remove default Tomcat container--><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><!-- Add Undertow container --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency><dependency><groupId>io.undertow</groupId><artifactId>undertow-websockets-jsr</artifactId></dependency>
再找到io.github.caochenlei.config.WebServerFactoryCustomizerConfig
,然后删掉。
问题三:前端组件的路径有没有一定规范?
回答三:有,需要按照《主功能模块名/次功能模块名》这种形式来存放生成出来的views界面,并且需要修改组件名为index.vue。
问题四:如何实现的按钮级别权限管理?
回答四:
- 后端使用
@PreAuthorize("hasAuthority('sys:department:add')")
注解来控制后端方法的访问权限 - 前端使用
v-if="checkPermission(['sys:department:add'])"
方法来控制按钮是否显示到页面
问题五:如何生成自己的RSA公/私钥?
回答五:在工程里新建RsaUtilsTest,然后运行以下代码生成即可。
public class RsaUtilsTest {private String publicFile = "D:\\auth_key\\rsa_key.pub";private String privateFile = "D:\\auth_key\\rsa_key";private String secret = "123456789abcdefg";@Testpublic void generateKey() throws Exception {RsaUtils.generateKey(publicFile, privateFile, secret, 2048);}}
生成后的文件可以直接替换工程默认的RSA公/私钥,也可以在application.yml中配置指定路径。
问题六:系统关于时间类型的处理?
回答六:系统后端所有时间字段需要手动加以下两个注解,代码生成器不会生成,第一个是用于返回前端的格式,第二个是序列化时采用的格式。
@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
为负数,并且可以在系统配置选项卡增加一个选项,并且自己实现。
问题八:为什么我配置了云存储,但是上传头像的时候遇到跨域问题?
回答八:相对应的云存储需要开启跨域配置,默认为"*",可参考:点击访问
问题九:@RedisCache注解如何使用?
回答九:@RedisCache应该运用到查询结果经常不会改变的方法上,方法参数最好是基础数据类型,引用类型也是可以的但是不建议,并且在该方法查询数据对应的修改方法上标注此注解,同时开启flush = true
功能,以缓存系统配置为例:
问题十:为什么我分配菜单后刷新当前页面,发现没有生效?
回答十:其实已经生效了,由于组件缓存,所以才没有看到效果,此时只需要CTRL+F5
强制刷新一下就能看到啦。
如果您有其他的问题,请联系作者或者关注CSDN进行私信。
版本说明
- 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