什么是Shiro:

  Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理

Shiro的核心功能包括:

  1. 身份验证(Authentication):验证用户的身份,确保用户是合法的。
  2. 授权(Authorization):控制用户对系统资源的访问权限,限制用户只能访问其被授权的部分。
  3. 会话管理(Session Management):管理用户会话,跟踪用户的登录状态和活动,并提供会话的持久化支持。
  4. 密码加密(Cryptography):提供密码加密和解密的支持,确保用户的密码在存储和传输过程中的安全性。
  5. Web支持:提供与Web应用程序集成的支持,包括集成主流Web框架(如Spring、Struts)和处理Web请求的过滤器等。

Shiro主要组件及相互作用:

  1. Subject(主体):

    • Subject 表示当前正在与应用程序交互的用户。可以是一个人、设备或其他系统实体。
    • Subject 封装了用户的身份和相关的安全操作,如登录、注销、权限检查等。
  2. SecurityManager(安全管理器):

    • SecurityManager 是 Shiro 的核心组件,负责协调和管理所有的安全操作。
    • SecurityManager 管理一个或多个 Realms,用于进行身份验证和授权。
  3. Realm(域):

    • Realm 是连接 Shiro 和安全数据源(如数据库、LDAP 等)的桥梁。
    • Realm 负责从数据源中获取用户的身份和权限信息,并提供给 SecurityManager 进行验证和授权操作。
  4. Authenticator(身份验证器):

    • Authenticator 负责对用户进行身份验证。
    • Authenticator 使用 Realm 获取用户的身份信息,并将其与用户提供的凭据进行比较,以确定用户是否合法。
  5. Authorizer(授权器):

    • Authorizer 负责对用户进行授权,确定用户是否有权访问特定资源。
    • Authorizer 使用 Realm 获取用户的角色和权限信息,并与应用程序定义的角色和权限进行匹配,以决定用户是否被授权访问资源。
  6. SessionManager(会话管理器):

    • SessionManager 负责管理用户的会话。
    • SessionManager 创建、维护和关闭用户会话,并提供会话的持久化支持。
  7. SessionDAO(会话数据访问对象):

    • SessionDAO 是用于会话数据的读取和存储的接口。
    • SessionDAO 与数据库或其他存储介质交互,将会话数据持久化或从持久化存储中读取会话数据。

  这些组件相互协作,形成了 Shiro 的安全框架。Subject 通过 SecurityManager 进行身份验证和授权操作,SecurityManager 使用 Realm 获取用户的身份和权限信息。而我们需要实现Realms的Authentication 和 Authorization。Authenticator 负责身份验证,Authorizer 负责授权,SessionManager 负责会话管理。SessionDAO 则提供会话数据的读取和存储支持。通过这

种相互作用,Shiro 提供了完善的安全功能,保护应用程序的安全性。

Shiro 认证过程:

  1. 用户提交身份信息:用户在应用程序的登录页面输入用户名和密码,并提交身份信息。
  2. Subject 提交身份信息:应用程序接收到用户提交的身份信息后,将其封装为 Subject 对象。
  3. SecurityManager 开始认证:SecurityManager 是 Shiro 的核心组件,负责协调和管理所有的安全操作。它接收到 Subject 提交的身份信息后,开始进行身份验证。
  4. SecurityManager 调用 Authenticator 进行身份验证:SecurityManager 会调用配置好的 Authenticator 进行身份验证。
  5. Authenticator 获取身份信息:Authenticator 使用 Realm(可能是单个 Realm 或多个 Realm 的组合)从数据源中获取用户的身份信息。
  6. Realm 获取用户身份信息:Realm 是连接 Shiro 和安全数据源的桥梁。它根据配置的方式(如数据库、LDAP 等)获取用户的身份信息。
  7. Authenticator 进行身份匹配:Authenticator 将用户提交的身份信息和 Realm 获取到的用户身份信息进行匹配,以确定用户是否合法。
  8. 认证结果返回给 SecurityManager:Authenticator 将认证结果(通过或失败)返回给 SecurityManager。
  9. SecurityManager 处理认证结果:SecurityManager 根据认证结果,如果认证成功,则将用户标记为已认证状态,并将用户的身份信息存储在 Subject 中供以后使用。如果认证失败,则抛出相应的异常。
  10. 认证结果返回给应用程序:SecurityManager 将认证结果返回给应用程序,应用程序可以根据认证结果决定如何处理。

Shiro 授权过程:

    1. 用户发起访问请求:
      用户在应用程序中发起对某个资源的访问请求,例如访问一个特定的 URL 或执行某个操作。

    2. Subject 发起授权请求:
      Subject 对象封装了当前用户的身份信息和相关的安全操作。当用户发起访问请求时,Subject 对象会将授权请求发送给 SecurityManager。

    3. SecurityManager 开始授权:
      SecurityManager 是 Shiro 的核心组件,负责协调和管理所有的安全操作。它接收到 Subject 的授权请求后,开始进行授权处理。

    4. SecurityManager 调用 Authorizer 进行授权:
      SecurityManager 会调用配置好的 Authorizer 进行授权操作。

    5. Authorizer 获取用户角色和权限信息:
      Authorizer 使用 Realm(可能是单个 Realm 或多个 Realm 的组合)从数据源中获取当前用户的角色和权限信息。

    6. Authorizer 进行角色和权限匹配:
      Authorizer 将用户的角色和权限信息与应用程序定义的角色和权限进行匹配,以确定用户是否有权访问请求的资源。

    7. 授权结果返回给 SecurityManager:
      Authorizer 将授权结果(允许访问或拒绝访问)返回给 SecurityManager。

    8. SecurityManager 处理授权结果:
      SecurityManager 根据授权结果,如果授权成功,则允许用户访问请求的资源。如果授权失败,则抛出相应的异常或采取其他处理措施。

    9. 授权结果返回给应用程序:
      SecurityManager 将授权结果返回给应用程序,应用程序可以根据授权结果决定如何处理用户的访问请求。

shiro框架基本概念介绍的更多相关文章

  1. Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

    本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464779 一.基本概念 帧缓冲(Framebuffer)是Linux系统为显示设备提供 ...

  2. shiro框架基础

    一.shiro框架简介 Apache Shiro是Java的一个安全框架.其内部架构如下: 下面来介绍下里面的几个重要类: Subject:主体,应用代码直接交互的对象就是Subject.代表了当前用 ...

  3. spring-mvc + shiro框架整合(sonne_game网站开发04)

    这篇文章讲的内容是在之前spring + mybatis + spring-mvc + freemarker框架整合的代码的基础上.有需要的可以看看我博客的前两篇文章. 另外,本文章所讲相关所有代码都 ...

  4. Shiro框架 (原理分析与简单实现)

    Shiro框架(原理分析与简单实现) 有兴趣的同学也可以阅读我之前分享的:Java权限管理(授权与认证)CRM权限管理   (PS : 这篇博客里面的实现方式没有使用框架,完全是手写的授权与认证,可以 ...

  5. shiro框架的组成和内部结构(下一篇为spring整合shiro)

    1.shiro简介 Apache Shiro是Java的一个安全框架.功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. ​ 实际上,Shir ...

  6. Hibernate 系列 01 - 框架技术 (介绍Hibernate框架的发展由来)

    引导目录: Hibernate 系列教程 目录 本篇导航: 为什么学习框架技术 框架的概念 主流框架的介绍 1.为什么学习框架技术 如何制作一份看上去具有专业水准的PPT文档呢?一个简单的方法就是使用 ...

  7. JavaScript单元测试框架JsUnit基本介绍和使用

    JavaScript单元测试框架JsUnit基本介绍和使用 XUnit framework XUnit是一套标准化的独立于语言的概念和结构集合,用于编写和运行单元测试(Unit tests). 每一个 ...

  8. spring batch (一) 常见的基本的概念介绍

    SpringBatch的基本概念介绍 内容来自<Spring Batch 批处理框架>,作者:刘相. 一.配置文件 在项目中使用spring batch 需要在配置文件中声明: 事务管理器 ...

  9. 记录心得-shiro框架demo示例

    从懵懂到了解,再到熟悉,是一个进步的过程! 先撸代码,跑起来看效果,再做详细的介绍,开始干活! 1,先列出工程目录结构,自己需要创建对应层级的程序和相关配置文件. 2,导入maven依赖的jar包.打 ...

  10. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十一):集成 Shiro 框架

    Apache Shiro 优势特点 它是一个功能强大.灵活的,优秀开源的安全框架. 它可以处理身份验证.授权.企业会话管理和加密. 它易于使用和理解,相比Spring Security入门门槛低. 主 ...

随机推荐

  1. python通过变量名称的反射,获取变量的引用

    有一些极端情况下,例如变量名称是动态的,我们无法直接调用变量名,如何获取到变量的引用呢? aa = [globals()["xxxx"]]

  2. 【Java】水果超市管理系统

    前言 说是个系统,看着像实训的产物,但实际上这是Java课程最后一个关于jdbc的大实验,yes,挺大的. 过程 看着视频里的一堆一堆的文件,逻辑混乱的讲解,我决定 我自己写这个系统 说干就干: 分析 ...

  3. tryhackme-Agent Sudo

    描述:您在深海下发现了一个秘密服务器.你的任务是侵入服务器内部并揭露真相. 枚举 nmap -sV -T4 -v 10.10.123.164 NSE: Script scanning 10.10.12 ...

  4. 华为防火墙NAT技术

    ---我是陈小瓜,一个普通的路人,和大家一起交流学习,完善自己. 源NAT NAT-no-pat 安全策略写法: 源NAT,写安全策略,写转换前的私网IP,因为先匹配安全策略.再匹配NAT策略 NAT ...

  5. CMU15445 (Fall 2020) 数据库系统 Project#2 - B+ Tree 详解(下篇)

    前言 上一篇博客中实现了单线程 B+ 树的查找.插入.删除和迭代操作,这篇博客将完成实验二的剩余任务:并发 B+ 树.实现 B+ 树并发访问最简单的方法就是在整棵树上加一把大锁,但是这样会导致过多线程 ...

  6. 一致性hash算法原理及实践

    大家好,我是蓝胖子,想起之前学算法的时候,常常只知表面,不得精髓,这个算法到底有哪些应用场景,如何应用在工作中,后来随着工作的深入,一些不懂的问题才慢慢被抽丝剥茧分解出来. 今天我们就来看看工作和面试 ...

  7. Paimon读取流程

    查询模式 先来看看官网关于Paimon查询模式的说明 可以看到查询模式围绕snapshot展开, 而snapshot分了两种一种是Last compact snapshot和 last snapsho ...

  8. React后台管理系统 02样式初始化,引入reset-css

    上一篇中,我们已经对项目的整体结构进行了搭建,现在需要对不需要的东西进行删除,最后留下这些东西. 现在需要对全部的样式进行清除,使用命令导入依赖:npm i reset-css 然后在main.tsx ...

  9. MyBatis-plus乐观锁

    什么是乐观锁呢?为什么要使用这个功能?这个功能能做什么呢?如何使用这个? 1.乐观锁( Optimistic Locking ) 是相对悲观锁而言的,乐观锁是假设认为数据一般情况下不会造成冲突,所以在 ...

  10. 【技术积累】Mysql中的SQL语言【一】

    建表语句 后续所有内容建立在这些SQL语句上 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), age INT ); CREATE ...