Shiro权限框架简介
2016-03-31 16:34
211 查看
什么是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):
用户身份验证组件,登录控制。
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)操作。
CacheManager (org.apahce.shiro.cache.CacheManager) :
缓存管理器,可以减少不必要的后台访问。提高应用效率,增加用户体验。
Cryptography(org.apache.shiro.crypto.*) :
Shiro的api大幅度简化java api中繁琐的密码加密。
Realms(org.apache.shiro.realm.Realm) :
程序与安全数据的桥梁
相关文章推荐
- 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
- GNU C 内联汇编介绍
- PROFIBUS-DP现场总线的结构及应用
- SQL编程篇 (二) 定义与流程控制
- Python 操作MySQL数据库
- Apache服务器access_log解读和分析
- hahaha
- 2016实习生笔试&面试总结思考
- openoffice connect mysql jdbc/odbc(just like access to mssql)
- linux命令-cp
- 蘑菇街笔试题1
- sparkSQL学习记录之一
- 华为上机题-二师弟的星际加法
- 用keras的cnn做人脸分类
- DSP28335 CAN模块使用
- Windows下使用Hexo+GithubPage搭建博客
- Protocol Buffer技术详解(Java实例)
- ////终于写完作业了////
- HashMap,LinkedMap,TreeMap的区别
- 加载数据提示动画