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

智能推荐

GNU ARM Toolchain 初学者入门指南-程序员宅基地

文章浏览阅读6.2k次,点赞19次,收藏62次。什么是交叉编译?交叉编译过程!如何理解代码编译过程!arm-none-eabi-gccarm-none-eabi-asarm-none-eabi-ldarm-none-eabi-objcopy_arm toolchain

html页面上有一个id值为s1的,达内java第3次周考题黄色背景为正确答案.doc-程序员宅基地

文章浏览阅读2.5k次。达内java第3次周考题黄色背景为正确答案.doc1 选择题40 题,每题 2 分 1、 在 CSS 中,关于 BOX 的 margin 属性的叙述正确的是( )单选 A、 边距 margin 只能取一个值 B、 margin 属性的参数有 margin-left、margin-right、margin-top、 margin-bottom C、 margin 属性的值不可为 auto D、 ma..._html 页面上有一个 id 值为 s1 的 元素,现需要使用 javascript 代码

linux嵌入式串口与zigbee,zigbee的串口与STM32通信-程序员宅基地

文章浏览阅读1.2k次。在TI 的CC2530中,使用的是协议栈Z-Stack2007,现在想通过串口与STM32通信,当STM32给zigbee发送数据时,zigbee接收,只是接收的这部分代码TI给封装起来了,只知道在配置里头是这样的:/* @ZL 串口初始化 */halUARTCfg_t uartConfig;/* UART Configuration */uartConfig.configured ..._linux zigbee stack

jieba 计算2个句子的文本相似度(Python实现)_jieba判断语义重复-程序员宅基地

文章浏览阅读6.1k次,点赞7次,收藏33次。余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。github 参考链接:https://github.com/ZhanPwBibiBibi/CHlikelihood# -*- coding: utf-8 -*-import jiebaimport numpy as npimport redef get_word_vector(s1,s2): """ :pa.._jieba判断语义重复

Openmesh函数库设计及与CGAL的对比_openmesh和cgal-程序员宅基地

文章浏览阅读4.7k次。Openmesh函数库设计及与CGAL的对比在前面写了CGAL模板类设计的一些思路,这里尝试写一点openmesh库的设计思路以及和CGAL的对比.虽然OPENMESH代码量小,不过还是只看懂皮毛,很大部分算是翻译帮助文档吧,主要用作笔记,方便以后继续分析。相对CGAL的功能强大和庞大(包含大量计算几何算法的实现),Openmesh显得更加小巧轻量化,它更专_openmesh和cgal

随便推点

操作系统常见的40道面试题_window os面试题-程序员宅基地

文章浏览阅读5.2k次,点赞2次,收藏47次。1). 死锁的概念在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲,就是两个或多个进程无限期的阻塞、相互等待的一种状态。2). 死锁产生的四个必要条件互斥:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用;若其他申请使用该资源,那么申请进程必须等到该资源被释放为止;占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有;_window os面试题

webpack 3 零基础入门教程 #6 - 使用 loader 处理 CSS 和 Sass-程序员宅基地

文章浏览阅读66次。1. 什么是 loader官方的解释是这样的:loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。l..._webpack3处理sass

a*算法流程图_关于流程图,你想知道的都在这里-程序员宅基地

文章浏览阅读9.5k次,点赞3次,收藏7次。为大家精选了10片优秀的流程图文章~画了多年的流程图,你真的画规范了吗?如何画逻辑流程图,这个技能你Get了没?流程图那么多,你数得过来吗?产品的三种流程图,你都知道吗?三种常见「产品流程图」是如何思考与绘制出来的?PM小技巧——流程图&产品原型关于流程图元素定义、结构分类;以及,我有一些技巧告诉你线框流程图:一款用于工作流程或APP的UX交付一次流程图设计的思考案例分析:绘制流程图需要注..._a* algorithm flowchart

计算机usb接口禁用,台式机usb接口禁用了怎么办-程序员宅基地

文章浏览阅读7.2k次。我们的台式机接口有时候用不了,可能是被禁用了,那要怎么样解决呢?下面由学习啦小编给你做出详细的台式机usb接口禁用了解决方法介绍!希望对你有帮助!台式机usb接口禁用了解决方法一:一、检查是否禁用主板usb设备。进入bios屏蔽掉usb,进入bios选择 Devices - USB Setup- Front USB Ports- 将该项改为 Enable; 按F10保存并退出。二、在控制面板里检查..._主机的usb接口封了怎么用

IDEA连接Mysql失败:下载驱动失败,Failed todownload Cannot download Read timed out_idea com.mysql:mysql-connector下载卡住-程序员宅基地

文章浏览阅读482次,点赞7次,收藏8次。解决:1. 手动加入jar包2.选择自己maven仓库中存在mysql-connector3. 选择完毕后,确定使用:4. 进行测试连接_idea com.mysql:mysql-connector下载卡住

Java连接Redis存取数据(详细)_redis导入导出数据java-程序员宅基地

文章浏览阅读6.5k次,点赞4次,收藏30次。Java连接Redis存取数据一.相关工具二.准备工作1.启动redis2.外部连接测试3.新建连接。4.连接成功三.新建jedis项目1.新建项目2.命名项目3.引入相关jar包4.引入 junit5.新建包com.redis.test四.编写代码1.redis.properties : redis连接配置文件2.RedisPoolUtil : 连接池配置工具3.SerializeUtil : ..._redis导入导出数据java

推荐文章

热门文章

相关标签