权限框架Shiro快速整合前后端分离项目

本文介绍了如何将权限控制框架Shiro快速整合到前后端分离的SSM项目中,包括使用Maven管理jar包,建立权限五表,配置Shiro的相关组件如登录拦截器、全局异常处理器等,以及通过注解进行权限控制。文章详细展示了整合的每一步,适合有一定基础的开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎关顾我的博客

开端

好的,起因是我把最近做好的项目给一部分人进行了测试,发现大部分朋友都提出了同一个问题,你的系统权限管理是如何实现的。我只能尴尬的说一句,不好意思这部分还没开发。然而我也知道,其实对于一个项目来说,权限可以说是最主要的一部分。后端除了对权限进行处理,其实也就是提供一些业务逻辑对 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 依赖这些代码复制进项目里即可。

截屏2020-08-01 下午2.09.48

像下面的一样,我们引入最新版本的 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 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值