Shiro权限框架简介

       最近加入了gxpt项目组,被安排作权限模块,因此也有幸第一次接触到了Shiro框架。让咱们来一块儿领略Shiro的风采吧。java


什么是Apache Shiro?

       Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、受权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。mysql


       你能够用 Apache Shiro作下面的事情: 
sql

    • 验证用户apache

    • 对用户执行访问控制,如: 设计模式

      • 判断用户是否拥有角色adminapi

      • 判断用户是否拥有访问的权限缓存

    • 在任何环境下使用 Session API安全

    • 可使用多个用户数据源。例如一个是oracle用户库,另一个是mysql用户库网络

    • 单点登陆(SSO)功能session

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

相关文章
相关标签/搜索