Shiro学习总结(一)--关于Shiro

关于shiro: 

shiroapache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。

 

spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。

shiro不依赖于springshiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro

 

使用shiro实现系统 的权限管理,有效提高开发效率,从而降低开发成本。

shiro的架构:

Shiro学习总结(一)--关于Shiro_第1张图片

 Shiro的4大部分——身份验证,授权,会话管理和加密 
  •  Authentication:身份验证,简称“登录”。
  •  Authorization:授权,给用户分配角色或者权限资源
  •  Session Management:用户session管理器,可以让CS程序也使用session来控制权限
  • Cryptography:把JDK中复杂的密码加密方式进行封装。
  • 除了以上功能,shiro还提供很多扩展 
  •   Web Support:主要针对web应用提供一些常用功能。 
  •   Caching:缓存可以使应用程序运行更有效率。 
  •   Concurrency:多线程相关功能。
  •   Testing:帮助我们进行测试相关功能 
  •   "Run As":一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。 
  •  “Remember Me”:记住用户身份,提供类似购物车功能。
  • Shiro学习总结(一)--关于Shiro_第2张图片
 Subject:Subject 是与程序进行交互的对象,可以是人也可以是服务或者其他,通常就理解为用户。
所有Subject 实例都必须绑定到一个SecurityManager上。我们与一个 Subject 交互,运行时shiro会自动转化为与 SecurityManager交互的特定 subject的交互。

SecurityManager:SecurityManager 是 Shiro的核心,初始化时协调各个模块运行。然而,一旦 SecurityManager协调完毕,SecurityManager 会被单独留下,且我们只需要去操作Subject即可,无需操作SecurityManager 。 但是我们得知道,当我们正与一个 Subject 进行交互时,实质上是 SecurityManager在处理 Subject 安全操作。

Realms:Realms在 Shiro中作为应用程序和安全数据之间的“桥梁”或“连接器”。他获取安全数据来判断subject是否能够登录,subject拥有什么权限。他有点类似DAO。在配置realms时,需要至少一个realm。而且Shiro提供了一些常用的 Realms来连接数据源,如LDAP数据源的JndiLdapRealm,JDBC数据源的JdbcRealm,ini文件数据源的IniRealm,properties文件数据源的PropertiesRealm,等等。我们也可以插入自己的 Realm实现来代表自定义的数据源。 像其他组件一样,Realms也是由SecurityManager控制
 Shiro学习总结(一)--关于Shiro_第3张图片

subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。

 

securityManager:安全管理器,主体进行认证和授权都 是通过securityManager进行。

 

authenticator:认证器,主体进行认证最终通过authenticator进行的。

 

authorizer:授权器,主体进行授权最终通过authorizer进行的。

 

sessionManagerweb应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。

SessionDao:  通过SessionDao管理session数据,针对个性化的session数据存储需要使用sessionDao

 

cache Manager:缓存管理器,主要对session和授权数据进行缓存,比如将授权数据通过cacheManager进行缓存管理,和ehcache整合对缓存数据进行管理。

 

realm:域,领域,相当于数据源,通过realm存取认证、授权相关数据。

 

注意:在realm中存储授权和认证的逻辑。

 

cryptography密码管理,提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。

比如 md5散列算法。


你可能感兴趣的:(Shiro)