package org.apereo.cas.authentication.principal; import org.apache.commons.lang3.builder.ToStringBuilder; import javax.servlet.http.HttpServletRequest; /** * The {@link AbstractServiceFactory} is the parent class providing * convenience methods for creating service objects. * * @author Misagh Moayyed * @since 4.2 */ public abstract class AbstractServiceFactory<T extends Service> implements ServiceFactory<T> { @Override public <T1 extends Service> T1 createService(final String id, final Class<? extends Service> clazz) { final Service service = createService(id); if (!clazz.isAssignableFrom(service.getClass())) { throw new ClassCastException("Service [" + service.getId() + " is of type " + service.getClass() + " when we were expecting " + clazz); } return (T1) service; } @Override public <T1 extends Service> T1 createService(final HttpServletRequest request, final Class<? extends Service> clazz) { final Service service = createService(request); if (!clazz.isAssignableFrom(service.getClass())) { throw new ClassCastException("Service [" + service.getId() + " is of type " + service.getClass() + " when we were expecting " + clazz); } return (T1) service; } /** * Cleanup the url. Removes jsession ids and query strings. * * @param url the url * @return sanitized url. */ protected static String cleanupUrl(final String url) { if (url == null) { return null; } final int jsessionPosition = url.indexOf(";jsession"); if (jsessionPosition == -1) { return url; } final int questionMarkPosition = url.indexOf('?'); if (questionMarkPosition < jsessionPosition) { return url.substring(0, url.indexOf(";jsession")); } return url.substring(0, jsessionPosition) + url.substring(questionMarkPosition); } @Override public String toString() { return new ToStringBuilder(this).toString(); } }