package net.unicon.cas.addons.web.support; import net.unicon.cas.addons.serviceregistry.RegisteredServiceWithAttributes; import net.unicon.cas.addons.serviceregistry.services.RegisteredServicesPolicies; import org.jasig.cas.services.ServicesManager; import org.jasig.cas.web.support.ArgumentExtractor; import org.jasig.cas.web.support.CookieRetrievingCookieGenerator; import org.jasig.cas.web.support.WebUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * Specialization of <code>CookieRetrievingCookieGenerator</code> that decides whether to generate or not CAS TGC * based on a particular service's configuration setting for web SSO initiation. * * @author Dmitriy Kopylenko * @author Unicon, inc. * @since 1.2 */ public class ServiceInitiatingWebSsoAwareCookieGenerator extends CookieRetrievingCookieGenerator implements InitializingBean { private ServicesManager servicesManager; private List<ArgumentExtractor> argumentExtractors; private RegisteredServicesPolicies registeredServicesPolicies; public void setServicesManager(ServicesManager servicesManager) { this.servicesManager = servicesManager; } public void setArgumentExtractors(List<ArgumentExtractor> argumentExtractors) { this.argumentExtractors = argumentExtractors; } public void setRegisteredServicesPolicies(RegisteredServicesPolicies registeredServicesPolicies) { this.registeredServicesPolicies = registeredServicesPolicies; } @Override public void afterPropertiesSet() throws Exception { Assert.notNull(this.servicesManager, "servicesManager is required."); Assert.notNull(this.argumentExtractors, "argumentsExtractors are required."); Assert.notNull(this.registeredServicesPolicies, "registeredServicesPolicies is required."); } @Override public void addCookie(HttpServletRequest request, HttpServletResponse response, String cookieValue) { RegisteredServiceWithAttributes registeredService = RegisteredServiceWithAttributes.class.cast(this.servicesManager.findServiceBy(WebUtils.getService(this.argumentExtractors, request))); if (this.registeredServicesPolicies.ssoSessionInitiating(registeredService)) { super.addCookie(request, response, cookieValue); } } }