欢迎关顾我的博客
开端
好的,起因是我把最近做好的项目给一部分人进行了测试,发现大部分朋友都提出了同一个问题,你的系统权限管理是如何实现的。我只能尴尬的说一句,不好意思这部分还没开发。然而我也知道,其实对于一个项目来说,权限可以说是最主要的一部分。后端除了对权限进行处理,其实也就是提供一些业务逻辑对 CRUD 进行组合拼装。所以我打算接下来学习权限控制方面的知识并整合到我的项目中去,顺便把我的学习笔记分享给大家。
而对于权限控制的框架呢,听的最多的还是 Shiro 还有 Spring Security。Spring 的安全框架单独用在 Spring 项目中是无可挑剔的,不管是功能上还是维护方面。但是考虑到 Shiro 是一个全能性的框架,可以用在各种场合,甚至非 Web 项目中,由于它的会话独立于容器,后期学习分布式和微服务的时候也比较方便使用。~~最重要的是 Spring 官网用的也是 Shiro 的框架。~~所以还是打算学习 Shiro。
由于这部分内容比较多,我也发现了前后端项目部署那篇文章接近 1w 字导致阅读的时候不是很舒服,所以我打算把这个内容分成几个部分:初识 Shiro、配置重点、整合技巧来讲述。这篇文章是关于如何利用我们之前学习的知识快速进行 Shiro 与前后端分离项目的整合。虽然说是快速,我还是会一步步都告诉大家,并没有想象中的那么快。
整合
那么之前结果两篇长文的讲解,大家应该已经初步了解了一些关于 Shiro 的知识,接下来我们开始快速整合 Shiro 和 SSM ,我只讲最关键的步骤,至于更多额外功能的拓展留给大家自行发掘。
下文的内容可能略微与我前面写的两篇文章有所不同,不过不影响食用。毕竟一边做一边写,总会发现之前的一些问题并找到更好的解决方法。
使用 Maven 管理 jar 包
Maven 是一个后端的包管理工具,可以使用写 XML 的形式快速从仓库寻找 jar 包。
使用阿里云仓库
众所周知,如果你从 github clone 一个项目,如果没有梯子下载 jar 包可能就要花几个小时的时间。还好阿里爸爸给我们提供了镜像仓库,几分钟就能解决 jar 包的问题。关于引用仓库可以在 maven 配置中修改:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
不过我还是推荐大家在自己的项目中加入仓库,灵活性更高:
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
这里我就直接用 public 仓库,这个仓库整合了两个小仓库,东西更丰富些。releases 是线上版本,snapshots 是开发版本,都填 true 问题不大。
搜索并导入 jar 包
大家可以在上边这个网址内搜索自己要找的 jar 包,中心 central 仓库够大了,组织的话就是 Shiro 的网址,按结构写不要反了,然后输入文件名,点击搜索到的蓝色文件名后把 Maven 依赖这些代码复制进项目里即可。

像下面的一样,我们引入最新版本的 Shiro 相关的 jar 包。具体使用哪些包的话请大家去官网上查找资料,比如说官网里提示说 core 包需要 slf4j 的支持,再比如说你用了谷歌的 IOC 容器,那么需要使用 guice 包等等。
<!-- Shiro all -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.5.3</version>
</dependency>
<!-- Shiro核心包 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.5.3</version>
</dependency>
<!-- 添加Shiro web支持 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.5.3</version>
</dependency>
<!-- 添加Shiro Spring支持 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.5.3</version>
</dependency>
<!-- 添加Shiro Spring Boot支持 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>1.5.3</version>
</dependency>
<!-- 添加日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.9</version>
</dependency>
日志包和 Spring Boot 包都不是必要的,主要还是 shiro-all 和 shiro-core 这两个核心包。
权限五表的建立
请转到下文,翻到最后,把权限五表的 SQL 代码运行一下,完成用户、角色。权限、用户角色、角色权限五表的建立。我在这里贴出我的五张表,与下文中的略微不同,为了方便整合作出了一些调整。
MySQL建表
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` INT AUTO_INCREMENT NOT NULL,
`usrName` VARCHAR ( 255 ) DEFAULT '' NOT NULL,
`usrPassword` VARCHAR ( 255 ) DEFAULT '' NOT NULL,
`usrNick` VARCHAR ( 255 ) DEFAULT '' NOT NULL,
`usrPhone` VARCHAR ( 255 ) DEFAULT '' NOT NULL,
`usrEmail` VARCHAR ( 255 ) DEFAULT '' NOT NULL,
`remark` VARCHAR ( 255 ) DEFAULT '' NOT NULL,
`lastLogin` BIGINT DEFAULT 0 NOT NULL,
`utcCreate` BIGINT DEFAULT 0 NOT NULL,
`utcModify` BIGINT DEFAULT 0 NOT NULL,
`modifyBy` VARCHAR ( 255 ) DEFAULT '' NOT NULL,
`valid` BIT (1) DEFAULT 1 NOT NULL,
PRIMARY KEY ( `id` )
) ENGINE=INNODB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` int(64) NOT NULL AUTO_INCREMENT,
`description` varchar(32) DEFAULT NULL,
`role` varchar(32) DEFAULT NULL,
`remark` varchar( 255 ) DEFAULT NULL,
`utcCreate` BIGINT DEFAULT 0,
`utcModify` BIGINT DEFAULT 0,
`modifyBy` VARCHAR ( 255 ) DEFAULT NULL,
`valid` BIT (1) DEFAULT