1.什么是shiro
Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和 会话管理等功能。
2.从外部来看Shiro,即从应用程序角度来观察如何使用Shiro完成工作。
①Subject 主体 也可以看做一个用户 与当前应用交互的应用可以看做一个用户,所有的subject都绑定到
securityManager,与subject的交互都会委托给securityManager
②securityManager 安全管理器,所有安全有关的都会交给securitymanager,是shiro的核心负责和其他
的组件进行交互
③realm域 securitymanager从realm中获取安全数据
④应用代码通过suject 来进行认证和授权,suject又委托给securitymanager,securitymanager从realm
中获取数据进行合理的判断和授权
3.从内部来看Shiro的架构
①subject:主体,与应用交互的用户,主体要访问系统,系统需要对主体进行认证、授权。
②securityManager:安全管理器,主体进行认证和授权都 是通过securityManager进行。
③Authenticator即认证器,主体进行认证最终通过authenticator进行的。
④Authorizer即授权器,主体进行授权最终通过authorizer进行的。
⑤essionManager即会话管理,,它不依赖web容器的session,所以shiro可以使用在非
web应用上,也可以将分布式应用的会话集中在一点管理。
⑥ SessionDAO即会话dao,数据访问对象,用于会话的CRUD,比如我们想把Session保存到
数据库,那么可以实现自己的SessionDAO,通过如JDBC写到数据库;比如想把Session放到
Memcached中,可以实现自己的Memcached SessionDAO;另外SessionDAO中可以使用Cache
进行缓存,以提高性能;
⑦CacheManager缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上
很少去改变,放到缓存中后可以提高访问的性能
⑧Realm即领域,相当于datasource数据源,可以是JDBC实现,也可以是LDAP实现,或者内存
实现等等,securityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户
身份数据在数据库那么realm就需要从数据库获取用户身份信息。
注意:Shiro不知道你的用户/权限存储在哪及以何种格式存储;所以我们一般在应用中都需要
实现自己的Realm;
⑨Cryptography即密码管理,shiro提供了一套加密/解密的组件,方便开发。比如提供常用的
散列、加/解密等功能。
4.认证(Authentication)
验证用户是否合法 在 shiro 中,用户需要提供principals (身份)和credentials(凭证) 给shiro,从而实现对用户身份的验证。
Principal:身份信息
是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等
credential:凭证信息
是只有主体自己知道的安全信息,如密码 、证书、指纹等。
认证流程:
案例演示一简单认证:
配置shiro.ini文件
[users]
vector=123456
测试:
public class TestAuthentication {
@Test
p