Shiro是什么?为什么要用Shiro?

news2024/11/27 15:41:42

前言

在这里插入图片描述

本文小新为大家带来 Shiro入门概述 相关知识,具体内容包括Shiro是什么为什么要用 ShiroShiro与Spring Security 的对比Shiro的基本功能(包括:基本功能框架功能简介),Shiro框架原理(包括:Shiro架构(Shiro外部来看)Shiro架构(Shiro内部来看))等进行详尽介绍~

不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者的路上,小新与大家共同成长!

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)

🚩欢迎关注小新的Git仓库:小新Java成长之路,不定期更新Java学习资料~


目录

Shiro入门概述

  • 前言
  • 目录
  • 一、Shiro是什么
  • 二、为什么要用 Shiro
  • 三、Shiro与Spring Security 的对比
  • 四、Shiro的基本功能
    • 1️⃣基本功能框架
    • 2️⃣功能简介
  • 五、Shiro框架原理
    • 1️⃣Shiro架构(Shiro外部来看)
    • 2️⃣Shiro架构(Shiro内部来看)
  • 后记

在这里插入图片描述

一、Shiro是什么

Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完成:认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。

在这里插入图片描述

Shiro官网:https://shiro.apache.org/

二、为什么要用 Shiro

自 2003 年以来,框架格局发生了相当大的变化,因此今天仍然有很多系统在使用Shiro。这与 Shiro 的特性密不可分。

易于使用:使用 Shiro 构建系统安全框架非常简单。就算第一次接触也可以快速掌握。

全面:Shiro 包含系统安全框架需要的功能,满足安全需求的“一站式服务”。

灵活:Shiro 可以在任何应用程序环境中工作。虽然它可以在 Web、EJB 和 IoC 环境中工作,但不需要依赖它们。Shiro 也没有强制要求任何规范,甚至没有很多依赖项。

强力支持 Web:Shiro 具有出色的 Web 应用程序支持,可以基于应用程序 URL 和Web 协议(例如 REST)创建灵活的安全策略,同时还提供一组 JSP 库来控制页面输出。

兼容性强:Shiro 的设计模式使其易于与其他框架和应用程序集成。Shiro 与Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin 等框架无缝集成。

社区支持:Shiro 是 Apache 软件基金会的一个开源项目,有完备的社区支持,文档支持。如果需要,像 Katasoft 这样的商业公司也会提供专业的支持和服务。

三、Shiro与Spring Security 的对比

  • (1)Spring Security 基于 Spring 开发,项目若使用 Spring 作为基础,配合 Spring Security做权限更加方便,而 Shiro 需要和 Spring 进行整合开发;
  • (2)Spring Security 功能比 Shiro 更加丰富些,例如安全维护方面;
  • (3)Spring Security 社区资源相对比 Shiro 更加丰富;
  • (4)Shiro 的配置和使用比较简单,Spring Security 上手复杂些;
  • (5)Shiro 依赖性低,不需要任何框架和容器,可以独立运行.Spring Security 依赖Spring 容器;
  • (6)Shiro 不仅仅可以使用在 web中,它可以工作在任何应用环境中。在集群会话时Shiro最重要的一个好处或许就是它的会话是独立于容器的。

四、Shiro的基本功能

1️⃣基本功能框架

在这里插入图片描述

2️⃣功能简介

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

五、Shiro框架原理

1️⃣Shiro架构(Shiro外部来看)

从外部来看 Shiro ,即从应用程序角度的来观察如何使用 Shiro 完成工作,Shiro 架构如下图所示:

在这里插入图片描述

  • (1)Subject:应用代码直接交互的对象是 Subject,也就是说 Shiro 的对外 API 核心就是
    Subject。Subject 代表了当前“用户”, 这个用户不一定 是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫, 机器人等;与 Subject 的所有交互都会委托给SecurityManager;Subject其实是一个门面,SecurityManager 才是实际的执行者;
  • (2)SecurityManager:安全管理器;即所有与安全有关的操作都会与 SecurityManager 交互;且其管理着所有Subject;可以看出它是 Shiro 的核心,它负责与 Shiro 的其他组件进行交互,它相当于 SpringMVC 中DispatcherServlet 的角色
  • (3)Realm:Shiro 从 Realm 获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从 Realm 获取相应的用户 进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色/权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource。

2️⃣Shiro架构(Shiro内部来看)

从Shiro内部来看,Shiro架构如下图所示:
在这里插入图片描述

  • (1)Subject:任何可以与应用交互的“用户”;
  • (2)SecurityManager :相当于 SpringMVC 中的 DispatcherServlet;是 Shiro 的心脏;
    所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进行认证、授权、会话及缓存的管理;
  • (3)Authenticator:负责 Subject 认证,是一个扩展点,可以自定义实现;可以使用认证策略(Authentication Strategy),即什么情况下算用户认证通过了;
  • (4)Authorizer:授权器、即访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能;
  • (5)Realm:可以有 1 个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是JDBC实现,也可以是内存实现等等;由用户提供;所以一般在应用中都需要实现自己的 Realm;
  • (6)SessionManager:管理 Session 生命周期的组件;而 Shiro 并不仅仅可以用在 Web
    环境,也可以用在如普通的 JavaSE 环境;
  • (7)CacheManager:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少改变,放到缓存中后可以提高访问的性能;
  • (8)Cryptography:密码模块,Shiro 提高了一些常见的加密组件用于如密码加密/解密。

后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/847431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

org.springframework.beans.factory.UnsatisfiedDependencyException:

今天碰到了一个数据库表中有2个主键,结果利用mp生成的po类,出现了一系列问题,报了这个错误,一看是这个实体类自带了2个filedId注解,运行springboot能不报错吗?报错信息挺有意思的,所以写了这篇博…

服务器时钟同步

服务器时钟同步 文章目录 服务器时钟同步背景windows时钟同步Linux机器上的时钟同步Centos时钟同步Ubuntu系统时钟同步 查看是否同步的命令 背景 运维,XXX服务器慢了2秒,导致XXX业务没有正常执行,请立即排查为啥会有时钟不同步的问题。 首先…

无涯教程-Perl - continue 语句函数

可以在 while 和 foreach 循环中使用continue语句。 continue - 语法 带有 while 循环的 continue 语句的语法如下- while(condition) {statement(s); } continue {statement(s); } 具有 foreach 循环的 continue 语句的语法如下- foreach $a (listA) {statement(s); } co…

React Native从文本内容尾部截取显示省略号

<Textstyle{styles.mMeNickname}ellipsizeMode"tail"numberOfLines{1}>{userInfo.nickname}</Text> 参考链接&#xff1a; https://www.reactnative.cn/docs/text#ellipsizemode https://chat.xutongbao.top/

C++学习——认识什么是STL以及string类的使用

目录 一&#xff1a;认识STL 1.什么是STL 2.STL当中的各种功能 3.STL的重要性 二&#xff1a;认识string类 1.什么是string 2.string类相关的使用方法 Tips1 &#xff1a;constructor Tips2&#xff1a;destructor Tips3&#xff1a;iterator Tips4&#xff1a;capacity ​编辑…

数学建模学习(9):模拟退火算法

模拟退火算法(Simulated Annealing, SA)的思想借 鉴于固体的退火原理&#xff0c;当固体的温度很高的时候&#xff0c;内能比 较大&#xff0c;固体的内部粒子处于快速无序运动&#xff0c;当温度慢慢降 低的过程中&#xff0c;固体的内能减小&#xff0c;粒子的慢慢趋于有序&a…

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists

不相关子查询 子查询的查询条件不依赖于父查询&#xff0c;称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询&#xff0c;称为 相关子…

【Hystrix技术指南】(6)请求合并机制原理分析

[每日一句] 也许你度过了很糟糕的一天&#xff0c;但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加&#xff0c;随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中&#xff0c;【熔断、隔离、降级、限流】是经常被使…

跨境商城系统源码的优势,助力企业海外扩张

跨境电商发展背景与趋势 随着全球化的推进和互联网技术的快速发展&#xff0c;跨境电商已成为企业海外拓展的重要途径。然而&#xff0c;跨境电商面临着诸多挑战&#xff0c;如复杂的海外市场、文化差异、海关监管等。为了解决这些问题&#xff0c;企业可以借助跨境商城系统源码…

连接SAP rfc一直报错如何解决?

问题如下&#xff1a; 代码&#xff1a; static String ABAP_AS_POOLED "ABAP_AS_WITH_POOL";private static Logger log;static {Properties connectProperties new Properties();connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "IP&q…

vue table动态合并, 自定义合并,参照合并,组合合并

<template><div><el-table:data"tableData":span-method"objectSpanMethod"border:header-cell-style"{ textAlign: center }"><el-table-column prop"area" label"区域" align"center">…

分班问题难?分班查询系统为你解决分班难题

老师们在教学工作中&#xff0c;特别是每个新学年开始&#xff0c;都会面临一个重要的任务——分班。除了分班名单的确定&#xff0c;分班查询也同样困扰老师们&#xff01;在分班过程中面临的难题&#xff0c;最关键的一点是在完成分班名单确定后&#xff0c;分班查询的通知显…

Win7之MS12-020死亡蓝屏

一&#xff0c;何为死亡蓝屏 1&#xff0c;简介 死亡蓝屏利用RDP协议&#xff0c;基于3389远程桌面端口对目标主机进行攻击&#xff0c;使目标机系统瘫痪导致蓝屏&#xff0c;严重影响着计算机的正常使用。 2&#xff0c;条件 1>目标操作系统未开启防火墙和杀毒软件等 2&g…

STM32 LoRa源码解读

目录结构&#xff1a; SX1278 |-- include | |-- fifo.h | |-- lora.h | |-- platform.h | |-- radio.h | |-- spi.h | |-- sx1276.h | |-- sx1276Fsk.h | |-- sx1276FskMisc.h | |-- sx1276Hal.h | |-- sx1276LoRa.h | -- sx1276LoRaMisc.h – src |-- fifo.c |-- lora.c |-- …

Neo4j笔记-数据迁移(导出/导入)

这里先说明以下几点&#xff1a; Neo4j在4.0下版本默认的库名是&#xff1a;graph.db Neo4j在4.0上版本默认的库名是&#xff1a;neo4j.db 不管是Neo4j&#xff0c;还是Neo4j Desktop&#xff0c;都会在bin目录下有neo4j、neo4j-admin软件。在conf目录下&#xff0c;有neo4j.…

mfc140u.dll文件下载安装的方法,修复缺失的mfc140u.dll

关于mfc140u.dll缺失的情况&#xff0c;其实可以说是非常的常见&#xff0c;这个错误可能会导致某些程序无法正常的工作或者是启动&#xff0c;所以我就要想办法去解决它&#xff0c;而解决它的方法就是下载一个新的mfc140u.dll文件&#xff0c;今天我们就来聊聊mfc140u.dll文件…

Java中有哪些可以用于日期和时间的API?

从Java 8开始&#xff0c;java.time包提供了新的日期和时间API&#xff0c;新增的API严格区分了时刻、本地日期、本地时间&#xff0c;并且&#xff0c;对日期和时间进行运算更加方便。主要涉及的类型有以下几类&#xff1a; LocalDate&#xff1a;不包含具体时间的日期。 Lo…

gRPC中interceptor拦截器的总结和实践

一、使用场景 gRPC中的interceptor拦截器分为客户端拦截器和服务端拦截器&#xff0c;分别是在客户端和服务端的请求被发送出去之前进行处理的逻辑。常见的使用场景有&#xff1a;&#xff08;1&#xff09;请求日志记录及监控&#xff1b;&#xff08;2&#xff09;添加请求头…

C++初阶语法——引用,从此和指针说byebye

前言&#xff1a;相信学过C语言的同学肯定被指针深深折磨过&#xff0c;从一级指针到二级指针&#xff0c;数组指针&#xff0c;函数指针等等&#xff0c;可谓是谈针色变。而在C中&#xff0c;使用引用代替了指针的使用&#xff0c;大大降低了我们学习的难度。 引用 一.什么是…

阿里云二级域名配置

阿里云二级域名配置 首先需要进入阿里云控制台的域名管理 1.选择域名点击解析 2.添加记录 3.选择A类型 4.主机记录设置【可以aa.bb或者aa.bb.cc】 到时候会变成&#xff1a;aa.bb.***.com 5.解析请求来源设置为默认 6.记录值 设置为要解析的服务器的ip地址 7.TTL 默认即…