Apache Shiro功能框架:
Shiro聚焦与应用程序安全领域的四大基石:认证、授权、会话管理和保密。
#,认证,也叫作登录,用于验证用户是不是他自己所说的那个人;
#,授权,也就是访问控制,比如用于决定“谁”是否有权限访问“什么”;
#,会话管理,管理用户相关的会话,即使在非web和ejb的环境下也支持;
#,保密,使用特性加密算法来保证用户数据的安全性,同时还要保证用起来够简单;
同时Shiro还提供了其他特性来在不同的应用程序环境下使用强化以上的四大基石:
#,Web支持:Shiro的web相关的API简化了web应用安全控制;
#,缓存,在Shiro中,缓存是一等公民,用于保证用户认证和权限控制的性能;
#,测试,支持可测试性,以便用户可以方便的对安全相关代码编写单元测试和集成测试;
#,记住密码,可以跨会话的记住用户的身份信息,以便只有在一些强制性的场合才需要登录。
Subject :实体,代表当前用户,方便交互,实际功能逻辑是由SecurityManager实现
SecurityManager : 安全管理器,负责所有与安全相关的操作,是Shiro的核心,负责与Shiro的其他组件进行交互
Realm : Shiro从Realm获取安全数据(如用户,角色,权限),数据源,需要我们自己实现并提供给框架
Authenticator : 负责身份验证,提供接口,需要我们自己实现并提供给框架
Authorizer :负责权限验证,提供接口,需要我们自己实现并提供给框架
SessionManager 会话管理器,不仅仅可以在Web环境中使用,也可以在普通javaSE中使用
SessionDAO:所有会话的CRUD功能
CacheManager:缓存控制器,来管理用户,角色,权限等的缓存
Cryptography : 密码模块,提供了一些常见的加密组件用于加密和解密
Shiro中做身份认证的是
Step1:应用程序代码在调用Subject.login(token)方法后,传入代表最终用户的身份和凭证构造的AuthenticationToken实例token。
Step2:将Subject实例委托给应用程序的SecurityManager(Shiro的安全管理)通过调用securityManager.login(token)来开始实际的认证工作。这里开始真正的认证工作了。
Step3,4,5:然后SecurityManager就会根据具体的reaml去进行安全认证了。
Shiro授权/访问控制:
主体 :Subject
主体,即访问应用的用户,在Shiro中使用Subject代表该用户。用户只有授权后才允许访问相应的资源。
资源 :Resource
在应用中用户可以访问的任何东西,比如访问JSP页面、查看/编辑某些数据、访问某个业务方法、打印文本等等都是资源。用户只要授权后才能访问。
权限 :Permission
安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权力。即权限表示在应用中用户能不能访问某个资源,如: 访问用户列表页面、 查看/新增/修改/删除用户数据(即很多时候都是CRUD(增查改删)式权限控制)、 打印文档等等。
如上可以看出,权限代表了用户有没有操作某个资源的权利,即反映在某个资源上的操作允不允许,不反映谁去执行这个操作。所以后续还需要把权限赋予给用户,即定义哪个用户允许在某个资源上做什么操作(权限),Shiro不会去做这件事情,而是由实现人员提供。
Shiro支持粗粒度权限(如用户模块的所有权限)和细粒度权限(操作某个用户的权限,即实例级别的),后续部分介绍。
角色 :Role