Shiro学习笔记(1)——综述
来源:互联网 发布:永久爱奇艺会员软件 编辑:程序博客网 时间:2024/05/24 07:34
刚刚接触Shiro我是懵逼的,我从来没见过这个东西,所以程序员是非常有趣的职业,虽然我还不是,这意味着工作的过程中会碰到各种奇怪的闻所未闻的东西,因此保持好奇和学习的能力十分重要,没错,我要学习Shiro了。
Shiro简介
Shiro是一款强力易用的Java安全框架,可以用于认证、授权、加密以及会话管理等等用途,无论是Java SE还是Java EE环境,它都能够发挥作用。Shiro具有以下特征:
上图来自于Apache Shiro官网。
Shiro的开发团队将它的”Primary Concerns”称为应用安全的基础,也就是:
- Authentication:也可以称作login,用于验证用户是否具有相关权限;
- Authorization:用于验证用户是否具有某些操作权限、以及决定用户的权限;
- Session Management:管理用户会话,用户登录到退出前都是在一次会话中,会话可以存在于非Web应用中;
- Cryptography:利用加密算法保证用户数据的安全性。
Shiro的扩展特性:
- Web Support:Shiro的Web Support APIs可以轻松地集成到Web应用上;
- Caching:缓存。缓存可以有效地保证安全操作的效率;
- Concurrency:并发性。Shiro支持多线程应用的并发验证,例如在一个线程中开启另一个线程,能够自动把权限传播过去;
- Testing:测试支持;
- Run as:该项特性允许一个用户作为另一个用户进行操作;
- Remember me:登录过一次之后接下来之后不用再登录。
Shiro不会维护用户、维护权限,我们需要自行设计、提供,然后通过相应的接口注入给Shiro。
Shiro架构
高层概览
在顶层概念层面上,Shiro有三个基础概念:Subject
、SecurityManager
以及Realm
,下图展示了它们之间是如何进行交互
接下来我们依次了解这些概念:
Subject
:主体,从上面的架构图中我们也可以看到,和应用代码发生直接交互的正是Subject
,它是对外API的核心。与应用发生特定安全性交互的当前用户就是所谓的主体,它当然可以是一个用户,也可以是第三方服务、定时任务等等任何与程序发生交互的,主体实例都需要被SecurityManager
约束,当和一个主体发生交互时,该交互会转化为特定主体和SecurityManager
的交互,可以认为SecurityManager
才操作是实际执行者;SecurityManager
:安全管理器,所有的安全相关的操作最终都需要和SecurityManager
交互,并且它管理着所有的Subject
,它是Shiro架构的心脏。关于SecurityManager
,后面还会介绍,我们需要谨记的是,当与一个主体发生交互时,实际上SecurityManager
在幕后承担了所有安全操作的工作。Realm
:域。它充当了Shiro和应用的安全数据之间的桥梁。我们可以将它视为安全操作的DAO层。
也就是说,一个Shiro应用,应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager;我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。
细致架构
上图描述了Shiro的核心架构理念。
- Subject:主体,当前与程序交互的任何实体,包括第三方程序。
- SecurityManager:所谓的心脏,所有的具体交互都由它控制,不仅管理所有Subject,也管理着所有认证、授权、会话和缓存。
Authenticator :认证器,负责执行和响应用户的登录认证操作。
- Authentication Strategy:当存在一个或者多个Realm时,由认证策略来决定在哪些情形下认证是成功还是失败。
Authorizer:授权器,或者叫访问控制器,决定主体在应用中能够访问哪些功能,能够进行哪些操作。
- SessionManager:该组件负责管理Session的生命周期及其创建,这在安全框架界是个另类的存在,它能够在任何环境内管理会话,即便根本没有EJB或者是Servlet容器。默认Shiro有一个自己的session来管理主体和应用之间的交互;
- SessionDAO:用于执行CRUD操作;
- CacheManager:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能;
- Cryptography:密码模块,Shiro提高了一些常见的加密组件用于如密码加密/解密。
阅读全文
0 0
- Shiro学习笔记(1)——综述
- Shiro学习笔记(1)——shiro入门
- Shiro学习笔记(6)——shiro缓存
- Shiro 学习笔记(7)—— Shiro 集成 Web
- shiro学习笔记1——基本概念
- 【shiro】shiro学习笔记1-shiro初识
- Shiro 学习笔记(1)—— Hello World
- Shiro学习总结(1)——Apache Shiro简介
- shiro学习笔记-1
- GAN学习笔记(1):GAN综述
- Hadoop 学习(1)——综述
- Shiro学习笔记<1>入门--Hello Shiro
- Shiro学习笔记(3)——授权(Authorization)
- Shiro学习笔记(2)——身份验证之Realm
- Shiro学习笔记(4)——ini 配置
- Shiro学习笔记(5)——web集成
- Shiro 学习笔记(2)—— 授权初步
- Shiro 学习笔记(2)—— JdbcRealm
- poj2751||51nod1205-贪心&经典问题&双机调度-Saving Endeavour
- 进程间切换与线程间切换的区别
- 常用java虚拟机参数(类加载/卸载跟踪)
- 关于输出的练习
- python可视化包pygal的安装(利用pip)
- Shiro学习笔记(1)——综述
- HDU 3397 Sequence operation(线段树综合操作)
- 练习赛一 C 斐波那契进阶
- ViewPager组件
- VC 6.0 使用GDI+类库进行图片处理
- 机器学习之朴素贝叶斯分类算法
- 打印当前时间。学习使用Date类和Calendar类
- 逻辑回归的回顾
- Unity如何实现在球表面移动并朝向一目标点 (二)