2021SC@SDUSC
DefaultSubjectFactory类图如下:
创建DelegatingSubject 实例的默认SubjectFactory实现。
简单来说就是通过工厂模式产生DelegatingSubject实例。
该类只有两个方法:
1.createSubject
public Subject createSubject(SubjectContext context) {
SecurityManager securityManager = context.resolveSecurityManager();
Session session = context.resolveSession();
boolean sessionCreationEnabled = context.isSessionCreationEnabled();
PrincipalCollection principals = context.resolvePrincipals();
boolean authenticated = context.resolveAuthenticated();
String host = context.resolveHost();
return new DelegatingSubject(principals, authenticated, host, session, sessionCreationEnabled, securityManager);
}
通过传入的上下文对象context来创建新的DelegatingSubject对象,典型的工厂模式应用。
2.newSubjectInstance
protected Subject newSubjectInstance(PrincipalCollection principals, boolean authenticated, String host,
Session session, SecurityManager securityManager) {
return new DelegatingSubject(principals, authenticated, host, session, true, securityManager);
}
函数作用域为protected,留给子类继承,如果需要实例化自定义 Subject 类,就直接覆盖 SubjectContext。
总结
DefaultSubjectFactory类是工厂,createSubject函数通过context对象创建新的DelegatingSubject实例,newSubjectInstance可以通过自定义的参数来创建DelegatingSubject实例