在超详细Vue+Spring Boot整合Shiro前后端分离架构-Shiro介绍(一)一文中,我们介绍了Shiro的基本概念,本章开始,我们进入Shiro的实现环节。
Shiro实战
shiro实战内容包括三个部分:(1)shiro后台表结构,用于存储shiro对应的用户、角色、权限及关联关系。(2)后端代码,及基于shiro配置用户、角色、权限及对应关系以及登录、认证。(3)前端代码,维护shiro信息及登录、认证。
这篇博文,我们讲解第一部分,及Shiro的表结构设计。
表结构设计
我这里设计了5张表,分别为Shiro_User,Shiro_Role,Shiro_Permission,Shiro_User_Role,Shiro_Role_Permission。
Shiro_User
Shiro_User
用于存储用户信息,主要涉及字段为用户Id(id)、用户名称(username)及用户密码(password)。shiro由提供的密码加密方式,所以,我们数据库存储的密文为调用shiro加密后的用户密码。
CREATE TABLE `Shiro_User` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`userCode` varchar(255) NOT NULL,
`userName` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `id` (`id`) USING BTREE,
UNIQUE KEY `code` (`userCode`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Shiro_Role
Shiro_Role
用于存储角色,如系统管理员、业务人员等信息。一个用户拥有多个角色,一个角色也可以属于多个用户。
CREATE TABLE `Shiro_Role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`roleCode` varchar(255) NOT NULL,
`roleName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `id` (`id`) USING BTREE,
UNIQUE KEY `roleCode` (`roleCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Shiro_Permission
Shiro_Permission
用于存储权限,一个角色可能有多个权限,一个权限也可能隶属于多个角色。
CREATE TABLE `Shiro_Permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`permissionCode` varchar(255) NOT NULL,
`permissionName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `id` (`id`) USING BTREE,
UNIQUE KEY `permissionCode` (`permissionCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Shiro_User_Role
Shiro_User_Role
用于存储用户与角色的关联关系。
CREATE TABLE `Shiro_User_Role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`userId` bigint(20) NOT NULL,
`roleId` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `userId` (`userId`),
KEY `roleId` (`roleId`),
CONSTRAINT `shiro_user_role_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `Shiro_User` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `shiro_user_role_ibfk_2` FOREIGN KEY (`roleId`) REFERENCES `Shiro_Role` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Shiro_Role_Permission
Shiro_Role_Permission
存储角色与权限的关联关系。
CREATE TABLE `Shiro_Role_Permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`roleId` bigint(20) NOT NULL,
`permissionId` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `roleId` (`roleId`),
KEY `permissionId` (`permissionId`),
CONSTRAINT `shiro_role_permission_ibfk_1` FOREIGN KEY (`roleId`) REFERENCES `Shiro_Role` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `shiro_role_permission_ibfk_2` FOREIGN KEY (`permissionId`) REFERENCES `Shiro_Permission` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
至此,数据库表结构已经设计完成。
基本上都是html.