package com.hwlcn.security.web.subject;
import com.hwlcn.security.SecurityUtils;
import com.hwlcn.security.subject.Subject;
import com.hwlcn.security.subject.SubjectBuilder;
import com.hwlcn.security.subject.SubjectContext;
import com.hwlcn.security.web.subject.support.DefaultWebSubjectContext;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* User: HuangWeili
* Date: 13-7-8
* Time: 下午10:23
*/
public class WebSubjectBuilder extends SubjectBuilder {
public WebSubjectBuilder(ServletRequest request, ServletResponse response) {
this(SecurityUtils.getSecurityManager(), request, response);
}
public WebSubjectBuilder(com.hwlcn.security.mgt.SecurityManager securityManager, ServletRequest request, ServletResponse response) {
super(securityManager);
if (request == null) {
throw new IllegalArgumentException("ServletRequest argument cannot be null.");
}
if (response == null) {
throw new IllegalArgumentException("ServletResponse argument cannot be null.");
}
setRequest(request);
setResponse(response);
}
@Override
protected SubjectContext newSubjectContextInstance() {
return new DefaultWebSubjectContext();
}
protected WebSubjectBuilder setRequest(ServletRequest request) {
if (request != null) {
((WebSubjectContext) getSubjectContext()).setServletRequest(request);
}
return this;
}
protected WebSubjectBuilder setResponse(ServletResponse response) {
if (response != null) {
((WebSubjectContext) getSubjectContext()).setServletResponse(response);
}
return this;
}
public WebSubject buildWebSubject() {
Subject subject = super.buildSubject();
if (!(subject instanceof WebSubject)) {
String msg = "Subject implementation returned from the SecurityManager was not a " +
WebSubject.class.getName() + " implementation. Please ensure a Web-enabled SecurityManager " +
"has been configured and made available to this builder.";
throw new IllegalStateException(msg);
}
return (WebSubject) subject;
}
}