What's Shiro?
Apache shiro 是JAVA的一个安全框架。Shiro可以帮助我们完成:认证,授权,会话管理,加密,与web集成,缓存等。
Authentication:身份认证/登录,验证用户是不是具有相应的身份。
Authorization:授权,权限认证。验证已认证的用户受否具有某个权限。判断用户具有某个操作权限。
Session Management:会话管理,即用户登录后就是一次会话。
Cryptography:加密,保护数据安全性
Web Support:Web集成支持
Caching:缓存。
Concurrency:支持多线程的Shiro验证,如在一个线程中开启另一个线程,把权限传播过去。
Testing:支持测试
Run As:允许一个用户假装为另一个用户的的身份进行访问。
Remember Me:记住我。
———————————————————————————————
Shiro 架构
Shiro外部架构图
直接可以看到直接对外暴露的API是Subject
Subject:主体,可以看作一个用户或者其他抽象的东西。
Shiro SecurityManager:安全管理器,所有与安全有关的操作都会和SM进行交互,并且SM管理者Subject,即SM为Shiro的核心。
Realm:域,Shiro从Realm获取安全数据(如用户,权限,角色),SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。
内部Subject:主体
SecurityManagement:类似SpringMVC的DispatcherServlet。
Authenticator:认证器,负责主体认证,可为一个拓展点进行自定义实现。需要认证策略:Authentication Strategy,即什么情况下为认证通过。
Authorizer:授权器(访问控制器),来决定主体是否有权限进行相应的操作。
Realm:可以有1个或者多个Realm,可以理解为实体安全数据源,用于获取安全实体的,可通过多种方式实现(JDBC,LDAP,内存等等),Shiro并不知道我们如何存储Realm,所以我们需要自己去实现自己的Realm。
Session Manager:用于管理Session
SessionDAO:可以将Session保存至数据库或者Cache中。
CacheManager:缓存控制器,来管理如用户,角色,权限的缓存
Cryptography:密码模块,提供加密组件。