DefaultWebSubjectContext类主要定义了获取request,设置request,解析request,获取response,设置response,解析response等操作,它继承了DefaultSubjectContext类,实现了WebSubjectContext接口,现对其接下如下:
1.WebSubjectContext接口
可以参考WebSubjectContext接口源码解析,主要定义了获取request,设置request,解析request,获取response,设置response,解析response等方法。
2.DefaultSubjectContext类
可以参考DefaultSubjectContext类源码解析,主要定义了将一些主机什么的信息保存到map中。
3.DefaultWebSubjectContext类
3.1.数据属性
private static final String SERVLET_REQUEST = DefaultWebSubjectContext.class.getName() + ".SERVLET_REQUEST";//servlet request
private static final String SERVLET_RESPONSE = DefaultWebSubjectContext.class.getName() + ".SERVLET_RESPONSE";//servlet response
3.2.构造方法
public DefaultWebSubjectContext() {
}
3.3.构造方法
public DefaultWebSubjectContext(WebSubjectContext context) {
super(context);
}
3.4.解析host信息(先从上下文map中获取,如果为空,则从token中获取,如果也为空,则从session中获取,如果也为空,则从request中获取,它覆盖了DefaultSubjectContext类的方法)
public String resolveHost() {
String host = super.resolveHost();
if (host == null) {
ServletRequest request = resolveServletRequest();
if (request != null) {
host = request.getRemoteHost();
}
}
return host;
}
3.5.从backingmap中获取servlet request(它实现了WebSubjectContext接口的方法)
public ServletRequest getServletRequest() {
return getTypedValue(SERVLET_REQUEST, ServletRequest.class);
}
3.6.将servlet request设置到backingmap中(它实现了WebSubjectContext接口的方法)
public void setServletRequest(ServletRequest request) {
if (request != null) {
put(SERVLET_REQUEST, request);
}
}
3.7.解析servlet request(先从backingmap中获取,如果为空,再从subject中获取,它实现了WebSubjectContext接口的方法)
public ServletRequest resolveServletRequest() {
ServletRequest request = getServletRequest();
//fall back on existing subject instance if it exists:
if (request == null) {
Subject existing = getSubject();
if (existing instanceof WebSubject) {
request = ((WebSubject) existing).getServletRequest();
}
}
return request;
}
3.8.从backingmap中获取servlet response信息(它实现了WebSubjectContext接口的方法)
public ServletResponse getServletResponse() {
return getTypedValue(SERVLET_RESPONSE, ServletResponse.class);
}
3.9.将servlet response设置到backingmap中(它实现了WebSubjectContext接口的方法)
public void setServletResponse(ServletResponse response) {
if (response != null) {
put(SERVLET_RESPONSE, response);
}
}
3.10.解析servlet response(先从backingmap中获取,如果不存在,再从subject中获取)
public ServletResponse resolveServletResponse() {
ServletResponse response = getServletResponse();
//fall back on existing subject instance if it exists:
if (response == null) {
Subject existing = getSubject();
if (existing instanceof WebSubject) {
response = ((WebSubject) existing).getServletResponse();
}
}
return response;
}