【笔记】SpringBoot+Shiro 实现简单权限管理(使用mysql数据库)
网上翻了好久 都没有SpringBoot+Shiro的入门教程 原本想看《跟我学Shiro》
然后发现这是从头开始 但是我就需要和SpringBoot整一块 不需要那么多的东西 感觉这个当参考书不错
于是东拼西凑终于整成了 把别人的教程上我用不到的都删了 该改的改 终于拿到了我理想中的效果
先是数据库部分 因为是简单的实现 就没有弄得太复杂
三部分 用户 -- 角色 -- 权限
四张表
用户和角色是多对一的关系(多对多懒得弄...)
角色和权限是多对多的关系(这个没啥好说的)
直接放代码了 那个url忽略就好了 完全没用上 我打算弄菜单的自动获取能访问的列表 这样就不用写死了
DROP TABLE IF EXISTS tb_user; CREATE TABLE tb_user ( `id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL UNIQUE KEY, `password` VARCHAR(255) NOT NULL, `role_id` INT NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); DROP TABLE IF EXISTS tb_role; CREATE TABLE tb_role ( `id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL UNIQUE KEY, `desc` VARCHAR(50) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); DROP TABLE IF EXISTS tb_permission; CREATE TABLE tb_permission ( `id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT, `parent_id` INT, `name` VARCHAR(50) NOT NULL UNIQUE KEY, `desc` VARCHAR(50) NOT NULL, `url` VARCHAR(255) NOT NULL DEFAULT '#', `order_by` INT, `type` INT NOT NULL DEFAULT 0, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); DROP TABLE IF EXISTS tb_role_permission; CREATE TABLE tb_role_permission ( `id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT, `role_id` INT NOT NULL, `permission_id` INT NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); INSERT INTO tb_permission (`id`, `name`, `desc`, url, `order_by`, `type`) VALUES ('1', 'user:*', '用户管理', '/getAll', '1', '1'); INSERT INTO tb_permission (`id`, `name`, `desc`, url, `order_by`, `type`) VALUES ('2', 'user:query', '查询用户', '#', '1', '1'); INSERT INTO tb_permission (`id`, `name`, `desc`, url, `order_by`, `type`) VALUES ('3', 'user:insert', '新增用户', '#', '1', '1'); INSERT INTO tb_permission (`id`, `name`, `desc`, url, `order_by`, `type`) VALUES ('4', 'user:update', '修改用户', '#', '1', '1'); INSERT INTO tb_permission (`id`, `name`, `desc`, url, `order_by`, `type`) VALUES ('5', 'user:delete', '删除用户', '#', '1', '1'); INSERT INTO tb_role (`id`, `name`, `desc`) VALUES ('1', 'admin', '系统管理员'); INSERT INTO tb_role (`id`, `name`, `desc`) VALUES ('2', 'users', '普通用户'); INSERT INTO tb_role_permission (`role_id`, `permission_id`) VALUES ('1', '1'); INSERT INTO tb_role_permission (`role_id`, `permission_id`) VALUES ('2', '2'); INSERT INTO tb_user (`id`, `username`, `password`, `role_id`) VALUES ('1', 'admin', 'admin', '1'); INSERT INTO tb_user (`id`, `username`, `password`, `role_id`) VALUES ('2', 'user1', '123456', '2');
这块设置了俩角色 管理组和用户组 管理组有查询权限 用户组没有查询权限
数据库整完之后就是java部分 先上依赖
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> <spring.version>2.2.6.RELEASE</spring.version> <nekohtml.version>1.9.22</nekohtml.version> <jdbc.version>8.0.16</jdbc.version> <druid.version>1.1.10</druid.version> <mybatis-spring.version>1.3.0</mybatis-spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${jdbc.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <!-- thymeleaf网页解析 --> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>${nekohtml.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>