Shiro权限框架简介
http://blog.csdn.net/xiaoxian8023/article/details/17892041
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载请声明:【转自 http://blog.csdn.net/xiaoxian8023 】
最近加入了gxpt项目组,被安排做权限模块,所以也有幸第一次接触到了Shiro框架。让我们来一起领略Shiro的风采吧。
什么是Apache Shiro?
Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。
你可以用 Apache Shiro做下面的事情:
- 验证用户
- 对用户执行访问控制,如:
- 判断用户是否拥有角色admin
- 判断用户是否拥有访问的权限
- 在任何环境下使用 Session API
- 可以使用多个用户数据源。例如一个是oracle用户库,另外一个是mysql用户库
- 单点登录(SSO)功能
- “Remember Me”服务 ,类似购物车的功能,shiro官方建议开启
Shiro要想做成以上的事情,主要依赖于4大API:
- Authentication —— 认证,用户身份识别,常被称为用户“登录”,who are you?
- Authorization —— 授权,访问控制过程,决定“谁”访问“什么”,who can do what?
- Session Management —— 会话管理,用户session管理器,用户相关的时间敏感的状态
- Cryptography —— 密码加密,把JDK中复杂的密码加密方式进行封装,保护或隐藏数据防止被偷窥
Shiro还支持一些辅助特性,如Web应用安全、缓存、单元测试和多线程,它们的存在强化了上面提到的四个要素。
为什么要用Shiro?
虽然目前有其他安全框架,比如 JAAS,Spring Security,但是仍有令人信服的理由让你选择Shiro:
- 易于使用 —— 可以让新手都能很快上手,应用安全的开发与管理将不再是一种痛苦
- 灵活性 —— 可以工作在任何应用环境中。虽然它工作在Web、EJB和IoC环境中,但并不依赖这些环境。既不强加任何规范,也无需过多依赖。
- Web能力 —— 对Web应用的支持很神奇,允许你基于应用URL和Web协议(如REST)创建灵活的安全策略,同时还提供了一套控制页面输出的JSP标签库。
- 热插拔 —— Shiro干净的API和设计模式使它可以方便地与许多的其他框架和应用进行无缝集成。
Shiro大体框架
要想快速了解Shiro,必须先从整体上去了解它,先说说它的高度概括框架:

Shiro包含三个核心组件:Subject,SecurityManager 和 Realms。具体来说:
Subject 是与程序进行交互的对象,可以是人也可以是服务或者其他,通常就理解为用户。
所有Subject 实例都必须绑定到一个SecurityManager上。我们与一个 Subject 交互,运行时shiro会自动转化为与 SecurityManager交互的特定 subject的交互。
SecurityManager 是 Shiro的核心,初始化时协调各个模块运行。
当SecurityManager协调完毕,SecurityManager 会被单独留下,且我们只需要去操作Subject即可,无需操作SecurityManager 。 但是我们得知道,当我们正与一个 Subject 进行交互时,实质上是 SecurityManager在处理 Subject 安全操作。
Realms在 Shiro中作为应用程序和安全数据之间的“桥梁”或“连接器”。
它获取安全数据来判断subject是否能够登录,subject拥有什么权限。有点类似DAO。在配置realms时,需要至少一个realm。而且Shiro提供了一些常用的 Realms来连接数据源,如LDAP数据源的JndiLdapRealm,JDBC数据源的JdbcRealm,ini文件数据源的IniRealm,properties文件数据源的PropertiesRealm等等。我们也可以插入自己的 Realm实现来代表自定义的数据源。 像其他组件一样,Realms也是由SecurityManager控制
Shiro整体框架
简单了解了一下大体的框架,现在让我们一起来目睹Shiro的“芳容”吧:


- Subject (org.apache.shiro.subject.Subject):
简称用户,解释同上。 - SecurityManager (org.apache.shiro.mgt.SecurityManager)
如上所述,SecurityManager是shiro的核心,协调shiro的各个组件。- Authenticator (org.apache.shiro.authc.Authenticator):
用户身份验证组件,登录控制。
- Authenticator (org.apache.shiro.authc.Authenticator):
- Authentication Strategy (org.apache.shiro.authc.pam.AuthenticationStrategy)
如果存在多个realm,则接口AuthenticationStrategy会确定什么样算是登录成功(例如,如果一个Realm成功,而其他的均失败,是否登录成功?)。 - Authorizer (org.apache.shiro.authz.Authorizer) :
访问控制组件,决定subject能拥有什么样角色或者权限。 - SessionManager (org.apache.shiro.session.SessionManager) :
创建和管理用户session。通过设置这个管理器,shiro可以在任何环境下使用session。- SessionDao (org.apache.shiro.mgt.eis.SessionDao):
代表SessionManager执行Session持久化(CURD)操作。
- SessionDao (org.apache.shiro.mgt.eis.SessionDao):
- CacheManager (org.apahce.shiro.cache.CacheManager) :
缓存管理器,可以减少不必要的后台访问。提高应用效率,增加用户体验。 - Cryptography(org.apache.shiro.crypto.*) :
Shiro的api大幅度简化java api中繁琐的密码加密。 - Realms(org.apache.shiro.realm.Realm) :
程序与安全数据的桥梁
Shiro权限框架简介的更多相关文章
- 在前后端分离的SpringBoot项目中集成Shiro权限框架
参考[1].在前后端分离的SpringBoot项目中集成Shiro权限框架 参考[2]. Springboot + Vue + shiro 实现前后端分离.权限控制 以及跨域的问题也有涉及
- (转) shiro权限框架详解06-shiro与web项目整合(上)
http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springM ...
- Shiro 权限框架使用总结
我们首先了解下什么是shiro ,Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨 ...
- Apache Shiro权限框架在SpringMVC+Hibernate中的应用
在做网站开发中,用户权限必须要考虑的,权限这个东西很重要,它规定了用户在使用中能进行哪 些操作,和不能进行哪些操作:我们完全可以使用过滤器来进行权限的操作,但是有了权限框架之后,使用起来会非常的方便, ...
- shiro权限框架
权限的组成部分:用户 资源 角色 权限 数据库关系表设计是根据自己项目需求设计的 account表role表(id,rolename)account_role(id,aid,rid)permissio ...
- SpringMVC整合Shiro权限框架
尊重原创:http://blog.csdn.net/donggua3694857/article/details/52157313 最近在学习Shiro,首先非常感谢开涛大神的<跟我学Shiro ...
- shiro权限框架(一)
不知不觉接触shiro安全框架都快三个月了,这中间配合项目开发踩过无数的坑.现在回想总结下,也算是一种积累,一种分享.中间有不够完美的地方或者不好的地方,希望大家指出来能一起交流.在这里谢谢开涛老师的 ...
- 关于Apache Shiro权限框架的一些使用误区的解释
多了不说了,进入正题,shiro是个权限框架提供权限管理等功能,网上的教程一般都是互相抄,比如<shiro:principal property="xxx"/>这个标签 ...
- SpringBoot整合Shiro权限框架实战
什么是ACL和RBAC ACL Access Control list:访问控制列表 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩,导致在授予时的复杂性,比较分散,不便于管理 例子:常见的文件系 ...
随机推荐
- Codeforces Round #435 (Div. 2) c+d
C:给n和k要求,找出n个不同的数,使得亦或起来等于k 可以先预处理从1到1e5,找亦或起来等于(11111111111111111)(二进制)的所有对数,然后四个一起亦或就是0了,再和k亦或 可以看 ...
- ASP.NET Core 开源项目整理
前言: 对 .NET Core 的热情一直没有下降过,新起的项目几乎都是采用 Core 来做开发. 跨平台是一个方面,另外就是 Core 很轻,性能远超很多开发语言(不坑). 一.ASP.NET Co ...
- New Concept English three (53)
30w/m 56errors The Scandinavian countries are much admired all over the world for their enlightened ...
- MySQL引擎各个引擎对比介绍
1.什么是存储引擎? 存储引擎类似于录制的视频文件,可以转换成不同的格式,如MP4,avi等格式,而存储在我们的磁盘上也会存在于不同类型的文件系统中如:Windows里常见的NTFS,fat32等.存 ...
- C8051F340 USB Fn hacking
/************************************************************************************ * C8051F340 US ...
- HihoCoder1078线段树的区间修改(线段树+lazy)
每个测试点(输入文件)有且仅有一组测试数据. 每组测试数据的第1行为一个整数N,意义如前文所述. 每组测试数据的第2行为N个整数,分别描述每种商品的重量,其中第i个整数表示标号为i的商品的重量Pi. ...
- Codeforces 808F. Card Game
题目大意 一个物品有三个属性 : 价值,键值,等级. 你不能选取等级高于\(level\)的物品,键值之和为质数的两个数字不共存. 问最低的等级使得可以选出价值之和超过\(k\)的物品. \(n\le ...
- Phong光照模型的Shader实现
计算反射向量 Phong用到的是反射向量,计算反射向量的公式是 R = 2*N(dot(N, L)) - L 这个公式是根据向量的投影公式以及平行四边形法则推导出来的 详细步骤请看这篇文章,讲的非常好 ...
- nginx之 [error] 6702#0:XXX is forbidden (13: Permission denied)
问题描述: 配置完 nginx 两个虚拟机后,客户端能够访问原始的server ,新增加的 server 虚拟机 不能够访问,报错如下页面 解决过程: 1. 查看报错日志[root@mysql03 n ...
- BZOJ2527:[POI2011]Meteors
浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...