多说一句,在学习shiro之前,我觉得应该先用 filter ,自己动手写过粗粒度的权限系统,而不要一上来就使用框架。


shiro简介

  1. shiro 系出名门 Apache ,是一个权限框架。
  2. 可以在 javaSE、javaEE 环境中使用。
  3. shiro可以完成认证,授权,加密,会话管理,缓存等功能;
  4. 与 spring security 比较,不落下风,更胜一筹,胜在简洁易用,胜在不依赖任何框架,spring security 依赖于 spring ,但是 spring security 可以控制粒度更细。。。

功能介绍

  • Authentication 登陆/身份认证

    在登陆的时候,验证某个用户是否拥有相应的身份,也就是是否是系统的使用人员;

  • Authorization 授权/权限认证

    验证某个已经认证通过,成功登陆的用户,是否拥有某个权限,一般是判断该身份拥有的角色的权限;

  • Session Manger 会话管理

    用户登陆以后,在没有退出之前,用户的所有信息都保存在会话中,如果是在 WEB 环境中,则是 HttpSession,如果实在 JavaSE 环境中,则是由 shiro 提供的 session ;

  • Cryptography 加密

    对数据进行加密。比如讲密码加密存进数据库里面;

  • Web Support Web支持

    Web 支持,很容易的集成到 Web 环境中 ;

  • Caching 缓存

    用户登录以后,对其信息,比如角色/权限信息进行缓存,下次再用的时候,不用再去查数据库,可以提供效率 ;

  • Concurrency 多线程认证

    Shiro 支持多线程的并发认证,即一个线程中开启另外一个线程,可以将权限传播过去 ;

  • Testing

    提供测试支持;

  • Run As

    允许一个用户伪装成另外一个用户的身份进行访问,如果允许的话 ;

  • Remember Me

    记住我,成功登陆一次以后,下次不再需要登陆 ;


从外部看 Shiro 架构

  • Application Code

    即应用程序代码 ;

  • Subject

    与应用程序代码直接交互的对象就是 Subject,代表当前用户 ,在 shiro 看来,任何东西,只要你与应用程序代码进行交互了,就把你看做是一个 Subject ,不管你是具体的人,还是只是爬虫,统统都看作 Subject 。

    Subject 其实像一个对外暴露接口一样,只是门面,任何具体的操作,都交给了后面的 SecurityManager ;

  • SecurityManager

    安全管理器,所有安全相关的操作,都会与它进行交互,比如认证、授权等功能;

    它是 Subject 背后的 大BOSS ,管理所有的 Subject ,也是整个 Shiro 的中央枢纽,类比于 springMvc 的 前端控制器;。

    连接 Subject 与 Realm ,负责与 Shiro 的其他组件进行交互 ;

  • Realm

    SecurityManager 下面务实的小弟,整个 Shiro 需要获取权限、身份等安全数据的时候,都需要从 Realm 这里获取,它可以看着是一个 数据源 ;


从内部看 Shiro 架构

  • Subject

    任何与应用进行交互的存在

  • SecurityManager

    Shiro 的话事人,中央枢纽,负责进行认证、授权、会话、缓存等功能 ;

  • Authenticator

    负责对 Subject 进行认证,内部可以自定义认证策略(Authentication Strategy) ;

  • Authorizer

    授权器,对 Subject 进行权限的判定 ,判断是否拥有某个权限;

  • Realm

    安全数据的来源,可以拥有多个 Realm ,可以从内存中获取,也可以从数据库获取,由使用者进行提供,因此一般在应用需要实现自己的 Realm ;

  • SessionManager

    管理 Session 的生命周期;

  • CacheManager

    缓存控制器,管理缓存的安全数据,比如用户的角色、权限等信息

  • Cryptography

    密码模块,Shiro 提供了常见的加密组件;

(一)Shiro,久闻其名,而今初相识的更多相关文章

  1. 初相识|performance_schema全方位介绍

    初相识|performance_schema全方位介绍 |导 语 很久之前,当我还在尝试着系统地学习performance_schema的时候,通过在网上各种搜索资料进行学习,但很遗憾,学习的效果并不 ...

  2. 我和python的初相识

    认识Python是大二的选修 单纯只是想赚学分而已 后来觉得越来越有趣. 一.python简介 简单来说Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python 的设 ...

  3. audacity 做音频分析之--初相识

    软件介绍: Audacity是一个跨平台的声音编辑软件,用于录音和编辑音频,是自由.开放源代码的软件.可在Mac OS X.Microsoft Windows.GNU/Linux和其它操作系统上运作. ...

  4. 神经网络架构PYTORCH-初相识(3W)

    who? Python是基于Torch的一种使用Python作为开发语言的开源机器学习库.主要是应用领域是在自然语言的处理和图像的识别上.它主要的开发者是Facebook人工智能研究院(FAIR)团队 ...

  5. Java 初相识

    Java是如何出现的呢?这就要回到1991年,那时候随着单片机的发展,出现了很多微型的系统,Sun公司在这个时候就成立的一个项目组,成员就有我们熟知的“Java之父” 詹姆斯·高斯林,起初的目标是为了 ...

  6. 3.Spring Cloud初相识--------Ribbon客户端负载均衡

    前言: 在生产环境中,未避免单点故障,每个微服务都会做高可用部署. 通白的说,就是每一个一模一样的服务会根据需求提供多分在多台机器上. 那么在大并发的情况下,如何分配服务可以快速得到响应,就成为了我们 ...

  7. NetworkX初相识

    听说NetworkX是一个很牛的复杂网络研究的工具,就来试一下吧. import networkx as nx G= nx.Graph()#建立一个空白的图 G.add_node("node ...

  8. 6.Spring Cloud初相识-------Zool路由

    前言: 在生产环境中,我们不可能将每个服务的真实信息暴漏出去,因为这样太不安全. 我们会选择使用路由代理真实的服务信息,由它负责转发给真实的服务. 新建一个Zool: 1.添加依赖 <?xml ...

  9. 5.Spring Cloud初相识-------Hystrix熔断器

    前言: 1.介绍Hystrix 在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情.Hy ...

随机推荐

  1. 【CSP模拟赛】益智游戏(最短路(DJSPFA)&拓扑排序)

    题目描述 小P和小R在玩一款益智游戏.游戏在一个正权有向图上进行. 小P 控制的角色要从A 点走最短路到B 点,小R 控制的角色要从C 点走最短路到D 点. 一个玩家每回合可以有两种选择,移动到一个相 ...

  2. receipt

    receipt - 必应词典 美[riˈsiːt]英[rɪ'siːt] n.收据:收入:接受:字据 v.开收据 网络收到:收条:发票 变形复数:receipts: 搭配give receipt:sig ...

  3. R Shiny app | 交互式网页开发

    网页开发,尤其是交互式动态网页的开发,是有一定门槛的,如果你有一定的R基础,又不想过深的接触PHP和MySQL,那R的shiny就是一个不错的选择. 现在R shiny配合R在统计分析上的优势,可以做 ...

  4. Visual Studio 2019 使用 Web Deploy 发布远程站点到IIS服务器

    Visual Studio 2019 使用 Web Deploy 发布远程站点到IIS服务器的方式 在开发完项目之后,我们需要把开发的项目发布到指定的服务器上,有两种方式,如下 1.把项目发布成文件系 ...

  5. Java开发手册-编程规约精选

    # Java开发手册-编程规约精选 ## 总约 - 采用驼峰写法 ## 变量 - 首字母小写 ## 方法 - 方法名首字母小写- 参数首字母小写 ## 引用 - <阿里巴巴Java开发手册> ...

  6. 谷歌官方 构建您的第一个应用 Kotlin版

    https://developer.android.google.cn/training/basics/firstapp MainActivity.kt package com.example.myf ...

  7. Eclipse SDK目录

    SDK standard developer kits 标准的开发工具 ---类似JDK   1.add-ons 这里面保存着附加库,比如GoogleMaps,当然你如果安装了OphoneSDK,这里 ...

  8. windows下新增项目本地通过git bash推送至远程github

    本地E盘workspace目录下新增了spring-cloud-alibaba-demo项目,还没有编译过,没有target等不需要推送至git的文件,所以就直接用git bash丢到github了. ...

  9. ES6深入浅出-6 ES 6 模块-2.babel webpack parcel

    https://babeljs.io/ 复制到命令行执行 提示一个警告.缺少package.json这个文件 npm init -t ls 然后看到了生成了package.json这个文件. 然后再去 ...

  10. 如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘

    如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘  摘自:http://blog.sina.com.cn/s/blog_7525b71f0101d0u8.html ...