按钮级权限管理系统
Posted 轻松的小希
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按钮级权限管理系统相关的知识,希望对你有一定的参考价值。
项目简介
CommonAdmin是一个按钮级权限管理系统,包含企业后台最常用的系统模块,代码简洁,开箱即用。
访问地址:https://gitee.com/caochenlei/common-admin
- 前端文档:https://panjiachen.gitee.io/vue-element-admin-site/zh/
- 后端文档:https://docs.spring.io/spring-boot/docs/current/reference/html/
主要功能
采用技术
前端技术栈:
技术名称 | 采用版本 | 官方地址 |
---|---|---|
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
│ 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 默认首页
├─login
│ index.vue 登录页面
├─redirect
│ index.vue 重定向
└─system
├─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
│ │ SysLogRecord.java 系统日志注解
│ ├─aspect
│ │ 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
│ │ SysDepartmentController.java
│ │ SysLogController.java
│ │ SysMenuController.java
│ │ SysRoleController.java
│ │ SysUserController.java
│ ├─domain
│ │ 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
│ │ 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
│ │ SysDepartmentServiceImpl.java
│ │ SysLogAsyncServiceImpl.java
│ │ SysLogServiceImpl.java
│ │ SysMenuServiceImpl.java
│ │ SysRoleServiceImpl.java
│ │ SysUserDetailsServiceImpl.java 登录时验证用户/获取权限
│ │ SysUserServiceImpl.java
│ │ SysUserTokenServiceImpl.java Token处理服务类
│ ├─utils
│ │ IpUtils.java 获取客户端请求IP工具类
│ │ JsonUtils.java JSON解析工具类
│ │ JwtUtils.java Token解析/生成工具类
│ │ MakeUtils.java 部门树、菜单树、路由表工具类
│ │ RegionUtils.java 通过IP地址获取区域工具类
│ │ RsaUtils.java 用于生成RSA公/私钥,用来加密
│ └─vo
│ PermissionVo.java 回显前端权限
│ ResultVo.java 回显前端统一处理结果
│ RouterVo.java 回显前端路由表
│ SysUserInfoVo.java 回显前端系统用户信息
│ TokenVo.java 回显前端Token
└─resources
│ application.yml 系统配置
│ banner.txt 启动Banner自定义信息
│ mybatis-config.xml MyBatis配置
├─mapper
│ 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 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,然后对这段依赖进行修改,将注释下的内容全部删去。
<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;//创建时间
如果您有其他的问题,请联系作者或者关注CSDN进行私信。
下个版本
- 新增个人修改密码
- 新增系统数据字典
- 新增通用上传接口(本地存储、阿里云、腾讯云、七牛云)
- …
联系作者
Email:774908833@qq.com
以上是关于按钮级权限管理系统的主要内容,如果未能解决你的问题,请参考以下文章
java SSM框架 websocket即时通讯 代码生成器 shiro redis 后台框架源码
net core体系-web应用程序-4asp.net core2.0 项目实战-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段