DefaultWebSubjectFactory类主要定义了创建webSubject的操作,它继承了DefaultSubjectFactory类,现对其解析如下:
1.DefaultSubjectFactory类
可以参考DefaultSubjectFactory类源码解析,里面主要定义了创建subject的操作。
2.DefaultWebSubjectFactory类
2.1.构造方法
public DefaultWebSubjectFactory() {
super();
}
2.2.创建subject(它覆盖了DefaultSubjectFactory类的方法)
public Subject createSubject(SubjectContext context) {
if (!(context instanceof WebSubjectContext)) {
return super.createSubject(context);
}
WebSubjectContext wsc = (WebSubjectContext) context;
SecurityManager securityManager = wsc.resolveSecurityManager();
Session session = wsc.resolveSession();
boolean sessionEnabled = wsc.isSessionCreationEnabled();
PrincipalCollection principals = wsc.resolvePrincipals();
boolean authenticated = wsc.resolveAuthenticated();
String host = wsc.resolveHost();
ServletRequest request = wsc.resolveServletRequest();
ServletResponse response = wsc.resolveServletResponse();
return new WebDelegatingSubject(principals, authenticated, host, session, sessionEnabled,
request, response, securityManager);
}
2.3.新建subject实例
protected Subject newSubjectInstance(PrincipalCollection principals, boolean authenticated,
String host, Session session,
ServletRequest request, ServletResponse response,
SecurityManager securityManager) {
return new WebDelegatingSubject(principals, authenticated, host, session, true,
request, response, securityManager);
}