SecurityManager
Subject 的幕后推手是 SecurityManager,Subject 代表当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
SecurityManager 是 Shiro 框架的核心,充当“保护伞”,引用多个内部嵌套安全组件,它们形成对象图。但,一旦 SecurityManager 及其内部对象图配置好,它就会退居幕后,应用开发人员几乎把他们的所有时间都花在 Subject API 调用上。
一个应用只需要一个 SecurityManager,是一个单例对象。它的缺省实现是POJO,因此可用POJO兼容的任何配置机制进行配置:普通的Java代码、Spring xml、YAML、和 ini 文件等。
比如,通过ini文件进行配置:
[main]
cm = org.apache.shiro.authc.credential.HashedCredentialsMatcher
cm.hashAlgorithm = SHA-512
cm.hashIterations = 1024
cm.storedCredentialsHexEncoded = false
iniRealm.credentialsMatcher = $cm
[main] 段落是配置SecurityManager 对象及其使用的其他任何对象(如 Realm) 的地方,在其中,我们看到了两个对象:
1、cm对象,是Shiro 的HashedCredentialsMatcher 类实例,cm 的各属性通过“嵌套点”语法进行配置。
2、iniRealm对象,被 SecurityManager 用来表示以INI 格式定义的用户账户。
然后在Java代码中,可容易获得 SecurityManager对象:
//装入 INI 配置
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//创建 SecurityManager
SecurityManager securityManager = factory.getInstance();
//使其可访问
SecurityUtils.setSecurityManager(securityManager);