前后端分离的权限管理系统设计和实现代码地址
项⽬托管在GitHub上,使⽤Git拉取代码。
相关视频
界⾯
设计和实现
技术栈
前端: JavaScript、Vue.js Element axios
后端: Java、Spring Boot、Mybatis-plus、 Shiro 、JWT
部署: Docker
数据库设计
代码设计
1. 动态权限控制
以下是项⽬中的⼀处代码:
@RequiresRoles({"admin"})
@RequiresPermissions({"menuList:add", "menuList:update"})
public Result saveOrUpdate(@RequestBody MenuList menuList) {
}
权限框架使⽤的是Shiro,通过Shiro的注解实现接⼝的权限,可以设置接⼝必须要有某个权限或者某个⾓⾊才可以访问。⼀个账户可以关联⼀个⾓⾊,⼀个⾓⾊可以关联多个权限,
通过数据库中的user permission role role_permission相互的关联实现动态权限控制。
2. 接⼝安全
通过JWT颁发token的⽅式实现前后端接⼝的安全。前端将token存档在Cookie中,每次请求接⼝是携带token。并通过Hibernate Validator实现参数校验。
3. ⽆限层级分类设计
category表中的parent_id(⽗级id) path(搜索路径,例如1-) level(表⽰当前节点到根节点的距离或者层级)三个字段实现⽆限层级。
4. 接⼝⽂档
通过Swagger实现,接⼝⽂档地址为localhost/IP:8888/authority/swagger-ui.html
项⽬部署
打包项⽬
前端使⽤npm包管理器,可以使⽤npm run build命令将前端项⽬打包,最终打包好的⽂件夹在 dist ⽂件夹下
后端使⽤Maven进⾏依赖管理,可以通过 Maven 将项⽬打成.jar的格式。
上传⽂件⾄服务器
在根⽬录新建 myDate ⽂件夹,⾥⾯存放上传的⽂件。如图所⽰,authority.jar 是后端⽂件,dist 是前端⽂件夹。
部署Docker
1. 安装Docker
# 安装 yum-utils 软件包
yum install -y yum-utils
# 设置稳定的存储库(使⽤阿⾥云镜像)
yum-config-manager --add-repo mirrors.aliyun/docker-ce/linux/po
yum makecache fast # 更新缓存
# 安装最新版本的 Docker Engine 和容器,或转到下⼀步以安装特定版本
yum install docker-ce docker-ce-cli containerd.io
# 启动 Docker
systemctl start docker
2. 设置Docker国内镜像
Docker 默认的镜像源于国内⽽⾔是有些慢,所以可以配置⼀下国内的镜像源,提⾼⼀下 docker pull 命令的下载速度# 创建⽬录
mkdir -p /etc/docker
# 添加163镜像到配置⽂件
cat>/etc/docker/daemon.json <<EOF
{
"registry-mirrors":["163","docker.mirrors.ustc.edu"]
}
EOF
# 重新加载⽂件重启docker 设置Docker开机⾃启
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
部署MySQL
# 拉取 Mysql 5.7.31 镜像
docker pull mysql:5.7.31
# 运⾏ Mysql 5.7.31
docker run -d --name myMysql -p 9506:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.31参数解释:
-d 后台运⾏容器,并返回容器 ID
--name 为容器指定⼀个名称
-p 指定端⼝映射,格式为:主机(宿主)端⼝:容器端⼝
-v 绑定⼀个卷,容器的 /var/lib/mysql 映射到 主机的⽬录 /data/mysql
-e MYSQL_ROOT_PASSWORD=123456 设置环境变量,密码设置为 123456
mysql:5.7.31 使⽤镜像 mysql:5.7.31
部署好MySQL之后,导⼊数据库⽂件,SQL⽂件在后端项⽬/src/main/resources/sql/⽂件夹下。打包后端并运⾏为容器
在 jar 包的同⼀级⽂件夹下新建 Dockerfile ⽂件,⽂件内容如下
FROM java:8
VOLUME /tmp
ADD authority.jar authority.jar
EXPOSE 8888
ENTRYPOINT ["java","-jar","/authority.jar"]
参数解释:
from java:8 拉取⼀个 jdk 为 1.8 的 docker image
ADD jar包添加⾄容器中
expose 该容器暴露的端⼝是多少,就是 jar 在容器中以多少端⼝运⾏
ENTRYPOINT 容器启动之后执⾏的命令,java -jar /authority.jar 即启动 jar
# 打包镜像
docker build -t authority .
# 运⾏容器
docker run -d -p 8888:8888 --name authority-8888 authority
打包前端并运⾏为容器
在前端⽂件夹 dist 的同⼀级⽂件夹下新建 Dockerfile ⽂件,⽂件内容如下
FROM nginx:latest
COPY ./dist /usr/share/nginx/html/
EXPOSE 80
# 打包镜像
docker build -t authority-ui .
# 运⾏容器
docker run -d -p 80:80 --name authority-ui-80 authority-ui
最终效果
authority-ui--80 前端容器
authority-8888 后端容器mysql社区版国内镜像下载
myMysql 数据库容器
打开浏览器访问服务器 IP地址 即可
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论