1. DefaultSecurityManager [类]
1.1 DefaultSecurityManager 的继承关系
1.1.1 DefaultSecurityManager的无参构造方法
/**
* Default no-arg constructor.
*/
public DefaultSecurityManager() {
super();
this.subjectFactory = new DefaultSubjectFactory();
this.subjectDAO = new DefaultSubjectDAO();
}
RealmSecurityManager [类]
1.2 setRealm()方法
realm英文原意:领域、场所
Realm即领域,相当于datasource数据源,securityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户身份数据在数据库那么realm就需要从数据库获取用户身份信息。
注意:不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。
设置单个realm
public void setRealm(Realm realm) {
if (realm == null) {
throw new IllegalArgumentException("Realm argument cannot be null");
}
Collection<Realm> realms = new ArrayList<Realm>(1);
realms.add(realm);
setRealms(realms);
}
setRealm(Realm realm) 的参数列表里需要一个Realm
此Realm 是一个接口。
1.3 Realm [接口]
1.3.1 查看Realm接口的所有实现类
1.4 IniRealm [类]
IniRealm 中有一个有参构造方法
这个有参构造方法,一般是将我们shirio.ini文件设置进去。
public IniRealm(String resourcePath) {
this();
Ini ini = Ini.fromResourcePath(resourcePath);
this.ini = ini;
this.resourcePath = resourcePath;
processDefinitions(ini);
}
DefaultSecurityManager可以设置setRealm
DefaultSecurityManager可以设置setRealm
// 1. 初始化shiro的安全管理器
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
// 2. 设置用户的权限信息到安全管理器
Realm realm = new IniRealm("classpath:shirio.ini");
defaultSecurityManager.setRealm(realm);
但是看看继承关系
setRealm() 方法是类 RealmSecurityManager中的方法,为什么能调用呢?
因为DefaultSecurityManager 继承了RealmSecurityManager,就可以调用RealmSecurityManager类中的方法。
UsernamePasswordToken
在创建token令牌,记录用户认证的身份和凭证即账号和密码的时候,会用到UsernamePasswordToken类,它有一个接口AuthenticationToken,我们一般都是
AuthenticationToken usernamePasswordToken =
new UsernamePasswordToken(username,password);