springboot2.x shiro整合_spring boot2.x shiro-程序员宅基地

技术标签: java  shiro  springboot  

前言

  这篇博客旨在完成Springboot2.x与shiro与JWT的整合,先从Springboot2.x整合shiro开始,再将JWT与Shiro整合,其中JWT部分用到了缓存Redis。

正文

介绍

shiro介绍网上已经很多了,我们这里引用一下其中一个博客 Shiro框架简介

Apache Shiro是Java的一个安全框架。对比另一个安全框架Spring Sercurity,它更简单和灵活。Shiro可以帮助我们完成:认证、授权、加密、会话管理、Web集成、缓存等。
在这里插入图片描述

  1. Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
  2. Authorization:授权,即验证权限,验证某个已认证的用户是否拥有某个权限; 即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限。
  3. Session Management:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通的JavaSE环境的,也可以是Web环境的。
  4. Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
  5. Web Support:Web支持,可以非常容易的集成到Web环境中
  6. Caching:缓存,比如用户登录后,其用户信息,拥有的角色/权限不必每次去查,提高效率。
  7. Concurrency:Shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
  8. Testing:提供测试支持
  9. Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问
  10. Rember Me:记住我,这是非常常见的功能,即一次登录后,下次再来的话不用登录了。

原理

我们看完基本的介绍后,要首先了解一下shiro是怎么工作的:
在这里插入图片描述

  • Subject: 用户主体(把操作交给SecurityManager) 这个可以当成一个用户、一个爬虫…
  • SecurityManager:安全管理器(关联Realm)。进行认证和授权操作
  • Realm:Shiro连接数据的桥梁 ,这里就是获取数据库中密码、权限的地方。
流程(为了方便理解需要仔细读一下):
  1. 用户访问登录接口,传入username、password(或者其他的字段)后,为了能让shiro完成校验(账号密码认证、权限认证等),我们需要提供用户的真实密码,用户的权限信息,而这些信息需要我们重写Realm类中的两个方法来获取。
  2. 然后shiro先进行账号密码校验,正确后会返回seesionId信息(或者其他的,这个没有仔细看过),shiro还会把这些信息存放在内存中(session),用户下次访问带上这个sessioinId进行访问。
  3. 当用户携带sessionId进行访问有权限限制的资源时,shiro首先会根据我们提供的用户真实的密码验证sessionId是否正确(这里每次请求都要访问数据库似乎会大大提高服务器的开销,这里后面会提到),验证通过后会进一步根据我们提供(重写)的获取权限的方法进行权限验证,通过后才可正常访问。

所以我们只需要完成::

  1. 获取用户密码(我们需要把用户传过来的密码和数据库中的密码传给shiro,shiro帮我们完成了密码对比
  2. 获取用户的权限(权限认证shiro也会帮我们完成,我们只需要标注下访问某个接口需要什么权限就好了)

引入

首先我们需要引入pom文件:

<dependency> 
    <groupId>org.apache.shiro</groupId> 
    <artifactId>shiro-spring</artifactId>    
    <version>1.4.0</version>
</dependency>

配置

我们引入后需要进行配置,也就是原理中提到的 Subject->SecurityManager->Realm,我们记得顺序。然后开始编写 ShiroConfig 类:

ShiroConfig

/**
 * @Author: goodtimp
 * @Date: 2019/10/7 20:46
 * @description :  shiro配置类
 */
@Con
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43223929/article/details/102756305

智能推荐

css的mediaquery查询几种不生效的原因_media- query 不生效-程序员宅基地

文章浏览阅读6.3k次。今天上午搞了半个小时,在webstrom中修改了css样式,用chrom浏览器浏览不生效,在网上查了半天,看是不是webstrom的有写保护,或者chorm浏览器不支持,最后发现少and后面少了一个空格导致css mediaquery查询不生效,即使在chrom中的network中css样式文件已经被加载了。@media screen and 不起作用原因汇总。首先确认是不是css本身的问题,而不..._media- query 不生效

Arduino 语法、函数使用、最常用函数、arduino教程、arduino笔记、参考手册_arduino常用函数手册-程序员宅基地

文章浏览阅读1w次,点赞38次,收藏194次。函数部分数字 I/OpinMode()描述将指定的引脚配置成输出或输入。详情请见digital pins。语法pinMode(pin, mode)参数pin:要设置模式的引脚mode:INPUT或OUTPUT返回无例子ledPin = 13 // LED连接到数字脚13 void setup() { pinMode(ledPin,OUTPUT);//设置数字脚为输..._arduino常用函数手册

MySQL数据库概览_后,我们首先就来看一下,mysql数据库中有多少个数据库(你可以理解为,mysql数据库是-程序员宅基地

文章浏览阅读257次。SQL语句分类:DCL: 数据控制语言 GRANT、DENY、REVOKEDDD: 数据定义语言 CREATE、ALTER、DROP、TRUNCATEDML: 数据操纵语言 SELECT、DELETE、UPDATE、SELECTMysql默认数据库有4个(version 5.7及8)mysql: mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。(常用的,在mysql.user表中_后,我们首先就来看一下,mysql数据库中有多少个数据库(你可以理解为,mysql数据库是

H3C S5500-52C-EI SSH 服务器发送了断开连接数据包_服务器发送了断开连接的数据包-程序员宅基地

文章浏览阅读2.9k次。H3C S5500-52C-EI SSH 服务器发送了断开连接数据包The connection is closed by SSH Server.(code:2)_服务器发送了断开连接的数据包

iOS-底层原理 21:Method-Swizzling 方法交换_ios方法交换 父类 死循环-程序员宅基地

文章浏览阅读1.3k次。iOS 底层原理 文章汇总method-swizzling 是什么?method-swizzling的含义是方法交换,其主要作用是在运行时将一个方法的实现替换成另一个方法的实现,这就是我们常说的iOS黑魔法,在OC中就是利用method-swizzling实现AOP,其中AOP(Aspect Oriented Programming,面向切面编程)是一种编程的思想,区别于OOP(面向对象编程)OOP和AOP都是一种编程的思想ios_lowLevelOOP编程思想更加倾向于对业务模块的._ios方法交换 父类 死循环

前端移动端适配 - 媒体查询适配方案_pc端写的固定宽度,媒体查询适配移动端,width写100%没效果-程序员宅基地

文章浏览阅读3.4k次,点赞6次,收藏18次。工作中难免会有写静态页面的需求,有时候移动端适配真的是做的心累,如果自己新做一个页面倒还好,整体布局会按照自己习惯来,但有时候不得不修改别人的代码,尤其是别人没适配好的代码,找样式以及命名规范等问题够折磨一整天了。_pc端写的固定宽度,媒体查询适配移动端,width写100%没效果

随便推点

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化技术_深度学习框架遥感-程序员宅基地

文章浏览阅读930次,点赞2次,收藏8次。深度卷积网络采用“端对端”的特征学习,通过多层处理机制揭示隐藏于数据中的非线性特征,能够从大量训练集中自动学习全局特征(这种特征被称为“学习特征”),是其在遥感影像自动目标识别取得成功的重要原因,也标志特征模型从手工特征向学习特征转变。为使广大学者能理解卷积神经网络背后的数学模型和计算机算法,掌握利用PyTorch为基础的遥感影像地物分类,遥感图像目标检测,以及遥感图像目标分割等应用。1.现有几个优秀模型结构的演变原理,包括AlexNet,VGG,googleNet,ResNet,DenseNet等模型。_深度学习框架遥感

Oauth2.0 ( RFC-6749 ) 中文译文_rfc6749中文-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏26次。本文为RFC6749(OAuth2.0)的中文翻译,本文在不影响原文语义的情况下尽可能地采用更符合中文习惯的方式进行表述,如有翻译不妥当的地方请在评论中指出。PS:有些过于简单,或者不适合翻译的内容直接以原文呈现,如11节往后,基本上能读懂英语单词就不会有阅读障碍,所以就不翻译了。PPS:有些明明能简单的表述出来的东西非要绕十八个弯写出来,搞学术的都是鬼才。。。本文由spawpaw@ho..._rfc6749中文

Java音乐播放器,窗体程序 完整源码_java音乐播放器源码-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏20次。java 编写音乐播放器,窗体程序, 完整源码游戏,可以直接用来做课程设计或者毕业设计;代码功能完善,下载后可以直接运行!!_java音乐播放器源码

csgo准星设置代码_【老许教你玩CSGO】如何调整合适的准星参数-程序员宅基地

文章浏览阅读6.6k次。想要找到合适的准星,首先我们得知道调整准星的参数有哪些,这是最基本的准星调整方法,参数在网上一搜便可全部知晓。但是大家在面对一大串的准星参数时,完全是看花了眼,不知道以什么样的姿势来输入,这里我就来给大家整合一下,帮助更多的玩家能找到属于自己的那个准星。其实真正所需要的只有几个参数,只需要这几个便可完成准星的设置1 cl_crosshairsize 这个参数是用来设置准星的大小2 cl_cross..._csgo准星代码怎么用 csdn

docker curl: (56) Recv failure: 连接被对方重设_偶然出现curl pecv failure:连接被对方重设-程序员宅基地

文章浏览阅读7k次。现象:docker服务正常起来了,但是在外部curl的时候一直报错误解决方案:服务可能使用了配置文件或者在代码里面写死了。把原有127.0.0.1地址改成0.0.0.0。重新运行即可_偶然出现curl pecv failure:连接被对方重设

怎么去除pdf中的水印-程序员宅基地

文章浏览阅读112次。有时候下载一个pdf文件会发里面有水印,想要使用里面内容的时候很不方便,那么怎么去除pdf中的水印呢?想知道话就来看看下面的文章吧。 其实想要去除pdf中的水印是有两种方法的,首先给大家介绍的是网页版的 要借助的软件:迅捷pdf在线转换器 软件功能介绍:是一个不用下载软件就可以完成各种文..._ab pdf 下面水印

推荐文章

热门文章

相关标签