文档章节

Shiro权限框架简介

白志华
 白志华
发布于 2015/10/18 10:55
字数 1266
阅读 195
收藏 4

       最近加入了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):
      用户身份验证组件,登录控制。

  • 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) :
    程序与安全数据的桥梁



版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/xiaoxian8023/article/details/17892041

共有 人打赏支持
白志华
粉丝 31
博文 265
码字总数 57524
作品 0
长沙
程序员
私信 提问
zhaoml529/SpringMVC-Activiti5.16-Shiro

SpringOA简介 基于SpringMVC+Shiro+Activiti 5.16 的简单OA,可以快速入门Activiti学习用。 此版本前台使用的是EasyUI 框架简介 框架以Spring Framework为核心、Spring MVC作为模型视图控制器...

zhaoml529
2017/05/19
0
0
SpringMvc + Shiro[数据库存权限] 配置 ;[附git.oschina的项目地址]

一 shiro简介 apache shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明“你是谁?” We...

王庭
2015/10/28
0
3
Java EE(J2EE)快速开发框架--firefly_luna

firelfy 是一个企业信息化开发基础平台,Java EE(J2EE)快速开发框架,使用经典技术组合(Spring、Spring MVC、Apache Shiro、JPA、DWZ-UI),包括核心模块如:用户管理、角色管理、菜单管理...

匿名
2016/03/29
2.7K
3
[翻译-Shiro]-Apache Shiro 简介

译者:刘晓日 Apache Shiro是一个功能强大、灵活的,开源的安全框架。它可以很好的处理认证、授权、企业会话管理和加密。 Apache Shiro的首要目标是易于理解与使用。安全通常很复杂,甚至让人...

乱笔·青玉
2013/02/03
0
1
shiro之web配置

shiro之web配置 一、简介 通过配置来学习shiro,或者说通过配置来学习框架和软件,可以帮我们记忆这个框架或软件的核心功能有哪些,然后是通过什么模块来实现这些功能。本篇,我们学习shiro...

GITTODO
2016/01/31
339
0

没有更多内容

加载失败,请刷新页面

加载更多

matlab-自控原理 nichols 由开环传递函数画出奈奎斯曲线

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclcclosenu......

志成就
1分钟前
0
0
ABUSE建了个恶意网站数据库

数据库已经按不同类型标记了各种恶意网站,例如它们当前是否在线,恶意内容类型,潜在威胁信息等。安全软件开发人员和浏览器开发人员可以免费使用此数据库来帮助用户拦截可能存在威胁的恶意网...

linuxCool
今天
2
0
【SQL】- 高级用法

数值和字符范围比较: between select *from books where price>=23.5 and price<=35; -- 等价于select *from books where price between 23.5 and 35; -- between包含边界的比较>= / <=......

ZeroneLove
今天
7
0
RabbitMQ如何解决各种情况下丢数据的问题

1.生产者丢数据 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Jav...

编程SHA
今天
4
0
JVM平台上的响应式流(Reactive Streams)规范

Reactive Streams 响应式流是一个倡议,用来为具有非阻塞后压的异步流处理提供一个标准。大家努力的目标集中在运行时环境(JVM和JavaScript)和网络协议上。 注:响应式流其实就是一个规范,...

java菜分享
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部