后台权限管理系统

开源项目 专栏收录该内容
4 篇文章 0 订阅

项目简介

CommonAdmin是一个按钮级权限管理系统,包含企业后台最常用的系统模块,代码简洁,开箱即用。

访问地址:https://gitee.com/caochenlei/common-admin

主要功能

  • 登录功能

  • 后台首页

  • 错误页面

  • 部门管理

  • 用户管理

  • 角色管理

  • 菜单管理

  • 日志管理

  • 系统配置

  • 个人中心

采用技术

前端技术栈:

技术名称采用版本官方地址
vue-element-admin4.4.0点击访问

后端技术栈:

技术名称采用版本官方地址
Spring Boot2.5.3点击访问
Spring Security5.5.1点击访问
Undertow2.2.9点击访问
MyBatis3.5.7点击访问
JJWT0.11.2点击访问
Knife4j3.0.3点击访问

开发的工具:

工具名称采用版本下载地址
IntelliJ IDEA2021.1下载地址
Maven3.6.3下载地址
MySQL5.7.34下载地址
Redis3.2.100下载地址
Visual Studio Code1.58.2下载地址
Node.js14.17.1下载地址
Java JDK1.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                              过滤器
    ├─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公钥

项目安装

# 导入数据库,注意数据库账号和密码
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";

    @Test
    public 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

CSDN:https://caochenlei.blog.csdn.net/

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值