shiro是apache 下的一个为Java开发的安全框架,用于身份验证,授权,密码加密和会话管理。
功能介绍
Authentication: 身份认证/登入。验证身份是否拥有某种相应的身份。
Authorization:授权及权限的管理,验证某用户是否拥有某种权限。
SessionManager: 会话管理,即一个用户在登入后的一次会话,在用户没有推出之前的所有信息都会保存在这个会话中。会话可以时javase环境,也可以是web环境。
Cryptography: 加密,用户数据的安全,在数据库中的信息是不是用明文密码显示,而是经过加密后的密码。
caching: 缓存,如用户再登入后其中的角色/权限不用再去查询,这样可以提高效率。
Testing:支持测试。
Run as: 允许一个用户假装另一个用户使用另一个用户的权限进行访问。
Remember me: 记住我,下次可以免登入。
在shiro的外部来看shiro
Subject: 主体,代表一个用户,这个用户不一定是一个真的用户,与之前应用交互的任何东西都可以是这个主体
SecurityManager: 安全管理器, 所有与安全相关的操作都与SecurityManager进行交互。是shiro的核心,可以将他看成是springmvc中的dispatchservlet前端控制器。
Realm:域,shiro从realm中获取安全信息(如用户,角色,权限)用于权限管理。可以看成是数据源datasource
shiro 不提供维护用户/权限,而是通过realm让其注入。
从shiro的内部来看
Subject:是用户主体,与应用程序进行交互。
SecurityManager: 是shiro的主体,类似于springmvc中的dispatchservlet。进行着一系列的控制,其中包含着验证,授权,会话管理等操作。
Authentication:验证,验证用户信息。
Authorizer:授权,验证用户是否具有某种权限。授权用户能够使用应用中的哪些功能。
Realm: 域,是获取安全信息的地方,常用的有三种,iniRealm,jdbcRealm,自定义Realm。
SessionManager:会话管理,用户的会话信息在这里存储。
SessionDao: Dao大家都用过,数据访问对象,用于会话的 CRUD,比如我们想把 Session 保存到数据库,那么可以实现自己的 SessionDAO,通过如 JDBC 写到数据库;比如想把 Session 放到 Memcached 中,可以实现自己的 Memcached SessionDAO;另外 SessionDAO 中可以使用 Cache 进行缓存,以提高性能;
CacheManager:缓存管理。来管理如用户、角色、权限等的缓存的。
Cryptography:密码模块,Shiro 提高了一些常见的加密组件用于如密码加密 / 解密的。