From 7268afa0f4c8a08c5a48cbbddcfcc03a3cccb2c2 Mon Sep 17 00:00:00 2001 From: Scott Battaglia Date: Wed, 9 Aug 2006 19:17:44 +0000 Subject: [PATCH] no message --- cas-client-core/cas-client-core.iml | 4 + cas-client-core/settings.xml | 12 +- .../authorization/AuthorizationException.java | 8 +- .../authorization/CasAuthorizedDecider.java | 4 +- .../DefaultCasAuthorizedDeciderImpl.java | 28 +- .../cas/client/authorization/package.html | 4 +- .../proxy/AbstractProxyReceptorServlet.java | 54 +-- .../cas/client/proxy/Cas20ProxyRetriever.java | 72 ++-- .../proxy/ProxyGrantingTicketStorage.java | 8 +- .../proxy/ProxyGrantingTicketStorageImpl.java | 69 ++-- .../cas/client/proxy/ProxyRetriever.java | 8 +- .../SpringConfiguredProxyReceptorServlet.java | 31 +- .../org/jasig/cas/client/proxy/package.html | 4 +- .../jasig/cas/client/util/CommonUtils.java | 22 +- .../cas/client/util/DelegatingFilter.java | 128 +++---- .../cas/client/util/FilterToBeanProxy.java | 41 +- .../org/jasig/cas/client/util/XmlUtils.java | 51 +-- .../AbstractUrlBasedTicketValidator.java | 75 ++-- .../cas/client/validation/Assertion.java | 12 +- .../cas/client/validation/AssertionImpl.java | 24 +- .../validation/Cas10TicketValidator.java | 29 +- .../validation/Cas20ProxyTicketValidator.java | 117 +++--- .../Cas20ServiceTicketValidator.java | 87 ++--- .../InvalidProxyChainValidationException.java | 14 +- .../client/validation/TicketValidator.java | 8 +- .../validation/ValidationException.java | 11 +- .../client/web/filter/AbstractCasFilter.java | 117 +++--- .../web/filter/CasAuthenticationFilter.java | 77 ++-- .../web/filter/CasAuthorizationFilter.java | 41 +- .../web/filter/CasValidationFilter.java | 81 ++-- .../HttpServletRequestWrapperFilter.java | 32 +- .../jasig/cas/client/web/filter/package.html | 3 +- .../main/resources/simpleFilterExample.xml | 137 ++++--- .../src/main/resources/web-simple-example.xml | 104 +++--- .../cas/client/PublicTestHttpServer.java | 25 +- .../AbstractCasAuthorizedDeciderTests.java | 15 +- .../AuthorizationExceptionTests.java | 8 +- .../DefaultCasAuthorizedDeciderImplTests.java | 7 +- ...stractProxyGrantingTicketStorageTests.java | 8 +- .../ProxyGrantingTicketStorageImplTests.java | 10 +- ...ngConfiguredProxyReceptorServletTests.java | 20 +- .../cas/client/util/CommonUtilsTests.java | 8 +- .../client/util/DelegatingFilterTests.java | 35 +- .../AbstractTicketValidatorTests.java | 2 +- .../client/validation/AssertionImplTests.java | 6 +- .../validation/Cas10TicketValidatorTests.java | 22 +- .../Cas20ProxyTicketValidatorTests.java | 30 +- .../Cas20ServiceTicketValidatorTests.java | 44 +-- .../filter/CasAuthenticationFilterTests.java | 46 +-- .../filter/CasAuthorizationFilterTests.java | 25 +- .../web/filter/CasValidationFilterTests.java | 29 +- .../HttpServletRequestWrapperFilterTests.java | 74 ++-- .../oneProxyGrantingTicketStorageConfig.xml | 6 +- .../proxyGrantingTicketStorageConfig.xml | 6 +- .../twoProxyGrantingTicketStorageConfig.xml | 14 +- cas-client-uportal/cas-client-uportal.iml | 4 + cas-client-uportal/pom.xml | 6 +- .../AbstractCasSecurityContextFactory.java | 50 ++- .../uportal/CasConnectionContext.java | 24 +- .../uportal/CasSecurityContext.java | 41 +- .../uportal/CasSecurityContextFactory.java | 6 +- .../uportal/ICasSecurityContext.java | 11 +- .../ThreadLocalAwareCasSecurityContext.java | 18 +- ...adLocalAwareCasSecurityContextFactory.java | 6 +- .../ThreadLocalAwareCasServiceFilter.java | 19 +- ...UPortalConfiguredProxyReceptorServlet.java | 14 +- .../uportalCasConfigurationContext.xml | 121 +++--- .../CasSecurityContextFactoryTests.java | 2 +- .../uportal/CasSecurityContextTests.java | 4 +- .../uportal/ServiceHolderTests.java | 3 +- ...alAwareCasSecurityContextFactoryTests.java | 2 +- ...readLocalAwareCasSecurityContextTests.java | 2 +- ...ThreadLocalAwareCasServiceFilterTests.java | 8 +- ...alConfiguredProxyReceptorServletTests.java | 4 +- .../properties/uPortalConfigContext.xml | 106 +++--- cas-client.iws | 353 +++++++++--------- 76 files changed, 1364 insertions(+), 1397 deletions(-) diff --git a/cas-client-core/cas-client-core.iml b/cas-client-core/cas-client-core.iml index fc4fe0c..5b18ac3 100644 --- a/cas-client-core/cas-client-core.iml +++ b/cas-client-core/cas-client-core.iml @@ -151,5 +151,9 @@ + + diff --git a/cas-client-core/settings.xml b/cas-client-core/settings.xml index e3e8e4a..977af0a 100644 --- a/cas-client-core/settings.xml +++ b/cas-client-core/settings.xml @@ -1,8 +1,8 @@ - - central - JA-SIG Maven Repository - http://developer.ja-sig.org/maven/ - jasig - + + central + JA-SIG Maven Repository + http://developer.ja-sig.org/maven/ + jasig + \ No newline at end of file diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/AuthorizationException.java b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/AuthorizationException.java index 5adc35e..fd2baca 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/AuthorizationException.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/AuthorizationException.java @@ -7,22 +7,18 @@ package org.jasig.cas.client.authorization; /** * Exception to be thrown if the user is not authorized to use the system. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ -public class AuthorizationException extends RuntimeException { +public final class AuthorizationException extends RuntimeException { /** * Unique ID for serialization. */ private static final long serialVersionUID = 5912038088650643442L; - public AuthorizationException() { - super(); - } - public AuthorizationException(String arg0, Throwable arg1) { super(arg0, arg1); } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/CasAuthorizedDecider.java b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/CasAuthorizedDecider.java index 1c944fe..85dfc43 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/CasAuthorizedDecider.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/CasAuthorizedDecider.java @@ -10,7 +10,7 @@ import org.jasig.cas.authentication.principal.Principal; /** * Simple interface for determining whether a Principal is authorized to use the * application or not. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -19,7 +19,7 @@ public interface CasAuthorizedDecider { /** * Determines whether someone can use the system or not. - * + * * @param principal the person we are checking * @return true if authorized, false otherwise. */ diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImpl.java b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImpl.java index fd20073..073e8ca 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImpl.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImpl.java @@ -13,26 +13,30 @@ import java.util.List; /** * Default implementation of the CasAuthorizedDecider that delegates to a list * to check if someone is authorized. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class DefaultCasAuthorizedDeciderImpl implements - CasAuthorizedDecider { + CasAuthorizedDecider { - /** The list of users authorized to use the system. */ - private List users; + /** + * The list of users authorized to use the system. + */ + private final List users; + + /** + * Constructor that takes the list of acceptable users as its parameters. + * + * @param users the list of acceptable users. + */ + public DefaultCasAuthorizedDeciderImpl(final List users) { + CommonUtils.assertNotEmpty(users, "users cannot be empty."); + this.users = users; + } public boolean isAuthorizedToUseApplication(final Principal principal) { return this.users.contains(principal.getId()); } - - public void init() { - CommonUtils.assertNotEmpty(this.users, "users cannot be empty."); - } - - public void setUsers(final List users) { - this.users = users; - } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/package.html b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/package.html index b8c3d55..10a60a7 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/authorization/package.html +++ b/cas-client-core/src/main/java/org/jasig/cas/client/authorization/package.html @@ -1,7 +1,7 @@

The authorization package contains the interface for a simple -abstraction for authorizing users to use an application. It is not a -complete role-based or access control authorization system.

+ abstraction for authorizing users to use an application. It is not a + complete role-based or access control authorization system.

diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/AbstractProxyReceptorServlet.java b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/AbstractProxyReceptorServlet.java index ee84926..0ca64bd 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/AbstractProxyReceptorServlet.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/AbstractProxyReceptorServlet.java @@ -5,21 +5,21 @@ */ package org.jasig.cas.client.proxy; -import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jasig.cas.client.util.CommonUtils; + import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jasig.cas.client.util.CommonUtils; +import java.io.IOException; /** * Implementation of an HttpServlet that accepts ProxyGrantingTicketIous and * ProxyGrantingTickets and stores them in an implementation of * {@link ProxyGrantingTicketStorage}. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -32,53 +32,61 @@ public abstract class AbstractProxyReceptorServlet extends HttpServlet { */ public static final String CONST_PROXY_GRANTING_TICKET_STORAGE_BEAN_NAME = "proxyGrantingTicketStorage"; - /** Constant representing the ProxyGrantingTicket IOU Request Parameter. */ + /** + * Constant representing the ProxyGrantingTicket IOU Request Parameter. + */ private static final String PARAM_PROXY_GRANTING_TICKET_IOU = "pgtIou"; - /** Constant representing the ProxyGrantingTicket Request Parameter. */ + /** + * Constant representing the ProxyGrantingTicket Request Parameter. + */ private static final String PARAM_PROXY_GRANTING_TICKET = "pgtId"; - /** Instance of ProxyGrantingTicketStorage to store ProxyGrantingTickets. */ + /** + * Instance of ProxyGrantingTicketStorage to store ProxyGrantingTickets. + */ private ProxyGrantingTicketStorage proxyGrantingTicketStorage; protected final Log logger = LogFactory.getLog(this.getClass()); - /** Unique Id for Serialization. */ + /** + * Unique Id for Serialization. + */ private static final long serialVersionUID = 8766956323018042995L; protected final void doGet(final HttpServletRequest request, - final HttpServletResponse response) throws ServletException, - IOException { + final HttpServletResponse response) throws ServletException, + IOException { final String proxyGrantingTicketIou = request - .getParameter(PARAM_PROXY_GRANTING_TICKET_IOU); + .getParameter(PARAM_PROXY_GRANTING_TICKET_IOU); final String proxyGrantingTicket = request - .getParameter(PARAM_PROXY_GRANTING_TICKET); + .getParameter(PARAM_PROXY_GRANTING_TICKET); if (CommonUtils.isBlank(proxyGrantingTicket) - || CommonUtils.isBlank(proxyGrantingTicketIou)) { + || CommonUtils.isBlank(proxyGrantingTicketIou)) { response.getWriter().write(""); return; } if (logger.isDebugEnabled()) { logger.debug("Received proxyGrantingTicketId [" - + proxyGrantingTicket + "] for proxyGrantingTicketIou [" - + proxyGrantingTicketIou + "]"); + + proxyGrantingTicket + "] for proxyGrantingTicketIou [" + + proxyGrantingTicketIou + "]"); } this.proxyGrantingTicketStorage.save(proxyGrantingTicketIou, - proxyGrantingTicket); + proxyGrantingTicket); response.getWriter().write(""); response - .getWriter() - .write( - ""); + .getWriter() + .write( + ""); } - public final void setProxyGrantingTicketStorage( - final ProxyGrantingTicketStorage proxyGrantingTicketStorage) { + protected final void setProxyGrantingTicketStorage( + final ProxyGrantingTicketStorage proxyGrantingTicketStorage) { this.proxyGrantingTicketStorage = proxyGrantingTicketStorage; } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java index caa4daa..7dcb69b 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/Cas20ProxyRetriever.java @@ -5,10 +5,6 @@ */ package org.jasig.cas.client.proxy; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; - import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.logging.Log; @@ -17,35 +13,60 @@ import org.jasig.cas.authentication.principal.Service; import org.jasig.cas.client.util.CommonUtils; import org.jasig.cas.client.util.XmlUtils; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + /** * Implementation of a ProxyRetriever that follows the CAS 2.0 specification. * For more information on the CAS 2.0 specification, please see the specification * document. - *

+ *

* In general, this class will make a call to the CAS server with some specified * parameters and receive an XML response to parse. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class Cas20ProxyRetriever implements ProxyRetriever { - /** Instance of Commons Logging. */ - protected Log log = LogFactory.getLog(this.getClass()); + /** + * Instance of Commons Logging. + */ + protected final Log log = LogFactory.getLog(this.getClass()); - /** Url to CAS server. */ - private String casServerUrl; + /** + * Url to CAS server. + */ + private final String casServerUrl; - /** Instance of HttpClient for connecting to server. */ - private HttpClient httpClient; + /** + * Instance of HttpClient for connecting to server. + */ + private final HttpClient httpClient; + + /** + * Main Constructor. + * + * @param casServerUrl the URL to the CAS server (i.e. http://localhost/cas/) + * @param httpClient an Instance of a thread-safe HttpClient. + */ + public Cas20ProxyRetriever(final String casServerUrl, final HttpClient httpClient) { + CommonUtils.assertNotNull(casServerUrl, + "casServerUrl cannot be null."); + CommonUtils + .assertNotNull(httpClient, "httpClient cannot be null."); + this.casServerUrl = casServerUrl; + this.httpClient = httpClient; + } public String getProxyTicketIdFor(final String proxyGrantingTicketId, - final Service targetService) { + final Service targetService) { final String url = constructUrl(proxyGrantingTicketId, targetService - .getId()); + .getId()); final GetMethod method = new GetMethod(url); try { @@ -53,7 +74,7 @@ public final class Cas20ProxyRetriever implements ProxyRetriever { final String response = method.getResponseBodyAsString(); final String error = XmlUtils.getTextForElement(response, - "proxyFailure"); + "proxyFailure"); if (CommonUtils.isNotEmpty(error)) { log.debug(error); @@ -71,28 +92,13 @@ public final class Cas20ProxyRetriever implements ProxyRetriever { } private String constructUrl(final String proxyGrantingTicketId, - final String targetService) { + final String targetService) { try { return this.casServerUrl + "proxy" + "?pgt=" - + proxyGrantingTicketId + "&targetService=" - + URLEncoder.encode(targetService, "UTF-8"); + + proxyGrantingTicketId + "&targetService=" + + URLEncoder.encode(targetService, "UTF-8"); } catch (final UnsupportedEncodingException e) { throw new RuntimeException(e); } } - - public void setCasServerUrl(final String casServerUrl) { - this.casServerUrl = casServerUrl; - } - - public void setHttpClient(final HttpClient httpClient) { - this.httpClient = httpClient; - } - - public void init() { - CommonUtils.assertNotNull(this.casServerUrl, - "casServerUrl cannot be null."); - CommonUtils - .assertNotNull(this.httpClient, "httpClient cannot be null."); - } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorage.java b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorage.java index dd6785a..8495973 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorage.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorage.java @@ -8,7 +8,7 @@ package org.jasig.cas.client.proxy; /** * Interface for the storage and retrieval of ProxyGrantingTicketIds by mapping * them to a specific ProxyGrantingTicketIou. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -17,9 +17,9 @@ public interface ProxyGrantingTicketStorage { /** * Method to save the ProxyGrantingTicket to the backing storage facility. - * + * * @param proxyGrantingTicketIou used as the key - * @param proxyGrantingTicket used as the value + * @param proxyGrantingTicket used as the value */ public void save(String proxyGrantingTicketIou, String proxyGrantingTicket); @@ -28,7 +28,7 @@ public interface ProxyGrantingTicketStorage { * ProxyGrantingTicketIou. Note that implementations are not guaranteed to * return the same result if retrieve is called twice with the same * proxyGrantingTicketIou. - * + * * @param proxyGrantingTicketIou used as the key * @return the ProxyGrantingTicket Id or null if it can't be found */ diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImpl.java b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImpl.java index 11e4b05..ba74a23 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImpl.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImpl.java @@ -5,33 +5,47 @@ */ package org.jasig.cas.client.proxy; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Implementation of {@link ProxyGrantingTicketStorage} that is backed by a * HashMap that keeps a ProxyGrantingTicket for a specified amount of time. - *

+ *

* A cleanup thread is run periodically to clean out the HashMap. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class ProxyGrantingTicketStorageImpl implements - ProxyGrantingTicketStorage { + ProxyGrantingTicketStorage { /** * Default timeout in milliseconds. */ private static final long DEFAULT_TIMEOUT = 60000; - private Map cache = new HashMap(); + private final Map cache = new HashMap(); - private long timeout = DEFAULT_TIMEOUT; + /** + * Constructor set the timeout to the default value. + */ + public ProxyGrantingTicketStorageImpl() { + this(DEFAULT_TIMEOUT); + } + + /** + * Sets the amount of time to hold on to a ProxyGrantingTicket if its never + * been retrieved. + * + * @param timeout the time to hold on to the ProxyGrantingTicket + */ + public ProxyGrantingTicketStorageImpl(final long timeout) { + final Thread thread = new ProxyGrantingTicketCleanupThread( + timeout, this.cache); + thread.setDaemon(true); + thread.start(); + } /** * NOTE: you can only retrieve a ProxyGrantingTicket once with this method. @@ -39,7 +53,7 @@ public final class ProxyGrantingTicketStorageImpl implements */ public String retrieve(final String proxyGrantingTicketIou) { final ProxyGrantingTicketHolder holder = (ProxyGrantingTicketHolder) this.cache - .get(proxyGrantingTicketIou); + .get(proxyGrantingTicketIou); if (holder == null) { return null; @@ -51,31 +65,14 @@ public final class ProxyGrantingTicketStorageImpl implements } public void save(final String proxyGrantingTicketIou, - final String proxyGrantingTicket) { + final String proxyGrantingTicket) { final ProxyGrantingTicketHolder holder = new ProxyGrantingTicketHolder( - proxyGrantingTicket); + proxyGrantingTicket); this.cache.put(proxyGrantingTicketIou, holder); } - public void init() throws Exception { - final Thread thread = new ProxyGrantingTicketCleanupThread( - this.timeout, this.cache); - thread.setDaemon(true); - thread.start(); - } - - /** - * Sets the amount of time to hold on to a ProxyGrantingTicket if its never - * been retrieved. - * - * @param timeout the time to hold on to the ProxyGrantingTicket - */ - public void setTimeout(final long timeout) { - this.timeout = timeout; - } - - private class ProxyGrantingTicketHolder { + private final class ProxyGrantingTicketHolder { private final String proxyGrantingTicket; @@ -95,14 +92,14 @@ public final class ProxyGrantingTicketStorageImpl implements } } - private class ProxyGrantingTicketCleanupThread extends Thread { + private final class ProxyGrantingTicketCleanupThread extends Thread { private final long timeout; private final Map cache; public ProxyGrantingTicketCleanupThread(final long timeout, - final Map cache) { + final Map cache) { this.timeout = timeout; this.cache = cache; } @@ -120,10 +117,10 @@ public final class ProxyGrantingTicketStorageImpl implements synchronized (this.cache) { for (final Iterator iter = this.cache.keySet().iterator(); iter - .hasNext();) { + .hasNext();) { final Object key = iter.next(); final ProxyGrantingTicketHolder holder = (ProxyGrantingTicketHolder) this.cache - .get(key); + .get(key); if (holder.isExpired(this.timeout)) { itemsToRemove.add(key); @@ -131,7 +128,7 @@ public final class ProxyGrantingTicketStorageImpl implements } for (final Iterator iter = itemsToRemove.iterator(); iter - .hasNext();) { + .hasNext();) { this.cache.remove(iter.next()); } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyRetriever.java b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyRetriever.java index 08228e1..4bea4a9 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyRetriever.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/ProxyRetriever.java @@ -10,7 +10,7 @@ import org.jasig.cas.authentication.principal.Service; /** * Interface to abstract the retrieval of a proxy ticket to make the * implementation a black box to the client. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -19,11 +19,11 @@ public interface ProxyRetriever { /** * Retrieves a proxy ticket for a specific targetService. - * + * * @param proxyGrantingTicketId the ProxyGrantingTicketId - * @param targetService the service we want to proxy. + * @param targetService the service we want to proxy. * @return the ProxyTicket Id if Granted, null otherwise. */ String getProxyTicketIdFor(String proxyGrantingTicketId, - Service targetService); + Service targetService); } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServlet.java b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServlet.java index 8baad5e..f90a566 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServlet.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServlet.java @@ -5,49 +5,50 @@ */ package org.jasig.cas.client.proxy; -import java.util.Map; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; import javax.servlet.ServletConfig; import javax.servlet.ServletException; - -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.WebApplicationContextUtils; +import java.util.Map; /** * Implementation of an HttpServlet that accepts ProxyGrantingTicketIous and * ProxyGrantingTickets and stores them in an implementation of * {@link ProxyGrantingTicketStorage}. - *

+ *

* Note that ProxyReceptorServlet attempts to load a * {@link ProxyGrantingTicketStorage} from the ApplicationContext either via the * name "proxyGrantingTicketStorage" or by type. One of these two must exist * within the applicationContext or the initialization of the * ProxyReceptorServlet will fail. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class SpringConfiguredProxyReceptorServlet extends - AbstractProxyReceptorServlet { + AbstractProxyReceptorServlet { - /** Unique Id for serialization */ + /** + * Unique Id for serialization + */ private static final long serialVersionUID = -5642050740265266568L; public void init(final ServletConfig servletConfig) throws ServletException { final WebApplicationContext context = WebApplicationContextUtils - .getRequiredWebApplicationContext(servletConfig.getServletContext()); + .getRequiredWebApplicationContext(servletConfig.getServletContext()); if (context.containsBean(CONST_PROXY_GRANTING_TICKET_STORAGE_BEAN_NAME)) { this - .setProxyGrantingTicketStorage((ProxyGrantingTicketStorage) context - .getBean(CONST_PROXY_GRANTING_TICKET_STORAGE_BEAN_NAME, - ProxyGrantingTicketStorage.class)); + .setProxyGrantingTicketStorage((ProxyGrantingTicketStorage) context + .getBean(CONST_PROXY_GRANTING_TICKET_STORAGE_BEAN_NAME, + ProxyGrantingTicketStorage.class)); return; } final Map map = context - .getBeansOfType(ProxyGrantingTicketStorage.class); + .getBeansOfType(ProxyGrantingTicketStorage.class); if (map.isEmpty()) { throw new ServletException("No ProxyGrantingTicketStorage found!"); @@ -55,11 +56,11 @@ public final class SpringConfiguredProxyReceptorServlet extends if (map.size() > 1) { throw new ServletException( - "Expecting one ProxyGrantingTicketStorage and found multiple instances."); + "Expecting one ProxyGrantingTicketStorage and found multiple instances."); } setProxyGrantingTicketStorage((ProxyGrantingTicketStorage) map.get(map - .keySet().iterator().next())); + .keySet().iterator().next())); } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/package.html b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/package.html index 8e28951..c3cbfc5 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/proxy/package.html +++ b/cas-client-core/src/main/java/org/jasig/cas/client/proxy/package.html @@ -1,7 +1,7 @@

The proxy package includes a servlet to act as a proxy receptor, -an interface for ProxyGrantingTicketStorage and an abstraction for -retrieving proxy tickets.

+ an interface for ProxyGrantingTicketStorage and an abstraction for + retrieving proxy tickets.

\ No newline at end of file diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java index 0b3dcd2..0b5bd46 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/CommonUtils.java @@ -9,7 +9,7 @@ import java.util.Collection; /** * Common utilities so that we don't need to include Commons Lang. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -23,8 +23,8 @@ public final class CommonUtils { /** * Check whether the object is null or not. If it is, throw an exception and * display the message. - * - * @param object the object to check. + * + * @param object the object to check. * @param message the message to display if the object is null. */ public static void assertNotNull(final Object object, final String message) { @@ -36,8 +36,8 @@ public final class CommonUtils { /** * Check whether the collection is null or empty. If it is, throw an * exception and display the message. - * - * @param c the collecion to check. + * + * @param c the collecion to check. * @param message the message to display if the object is null. */ public static void assertNotEmpty(final Collection c, final String message) { @@ -50,8 +50,8 @@ public final class CommonUtils { /** * Assert that the statement is true, otherwise throw an exception with the * provided message. - * - * @param cond the codition to assert is true. + * + * @param cond the codition to assert is true. * @param message the message to display if the condition is not true. */ public static void assertTrue(final boolean cond, final String message) { @@ -62,7 +62,7 @@ public final class CommonUtils { /** * Determines whether the String is null or of length 0. - * + * * @param string the string to check * @return true if its null or length of 0, false otherwise. */ @@ -73,7 +73,7 @@ public final class CommonUtils { /** * Determines if the String is not empty. A string is not empty if it is not * null and has a length > 0. - * + * * @param string the string to check * @return true if it is not empty, false otherwise. */ @@ -84,7 +84,7 @@ public final class CommonUtils { /** * Determines if a String is blank or not. A String is blank if its empty or * if it only contains spaces. - * + * * @param string the string to check * @return true if its blank, false otherwise. */ @@ -95,7 +95,7 @@ public final class CommonUtils { /** * Determines if a string is not blank. A string is not blank if it contains * at least one non-whitespace character. - * + * * @param string the string to check. * @return true if its not blank, false otherwise. */ diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/DelegatingFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/DelegatingFilter.java index c4768bc..cce738e 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/util/DelegatingFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/DelegatingFilter.java @@ -10,7 +10,6 @@ import org.apache.commons.logging.LogFactory; import javax.servlet.*; import java.io.IOException; -import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -18,55 +17,89 @@ import java.util.Map; * A Delegating Filter looks up a parameter in the request object and matches * (either exact or using Regular Expressions) the value. If there is a match, * the associated filter is executed. Otherwise, the normal chain is executed. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class DelegatingFilter implements Filter { - /** Instance of Commons Logging. */ - private Log log = LogFactory.getLog(this.getClass()); + /** + * Instance of Commons Logging. + */ + private final Log log = LogFactory.getLog(this.getClass()); - /** The request parameter to look for in the Request object. */ - private String requestParameterName; + /** + * The request parameter to look for in the Request object. + */ + private final String requestParameterName; - /** The map of filters to delegate to and the criteria (as key). */ - private Map delegators = new HashMap(); + /** + * The map of filters to delegate to and the criteria (as key). + */ + private final Map delegators; - /** The default filter to use if there is no match. */ - private Filter defaultFilter; + /** + * The default filter to use if there is no match. + */ + private final Filter defaultFilter; /** * Whether the key in the delegators map is an exact match or a regular * expression. */ - private boolean exactMatch = false; + private final boolean exactMatch; + + public DelegatingFilter(final String requestParameterName, final Map delegators, final boolean exactMatch) { + this(requestParameterName, delegators, exactMatch, null); + } + + public DelegatingFilter(final String requestParameterName, final Map delegators, final boolean exactMatch, final Filter defaultFilter) { + CommonUtils.assertNotNull(requestParameterName, + "requestParameterName cannot be null."); + CommonUtils.assertTrue(!delegators.isEmpty(), + "delegators cannot be empty."); + + for (final Iterator iter = delegators.keySet().iterator(); iter + .hasNext();) { + final Object object = delegators.get(iter.next()); + + if (!Filter.class.isAssignableFrom(object.getClass())) { + throw new IllegalArgumentException( + "All value objects in the delegators map must be filters."); + } + } + + this.requestParameterName = requestParameterName; + this.delegators = delegators; + this.defaultFilter = defaultFilter; + this.exactMatch = exactMatch; + } public void destroy() { // nothing to do here } public void doFilter(final ServletRequest request, - final ServletResponse response, final FilterChain filterChain) - throws IOException, ServletException { + final ServletResponse response, final FilterChain filterChain) + throws IOException, ServletException { final String parameter = request - .getParameter(this.requestParameterName); + .getParameter(this.requestParameterName); if (CommonUtils.isNotEmpty(parameter)) { for (final Iterator iter = this.delegators.keySet().iterator(); iter - .hasNext();) { + .hasNext();) { final String key = (String) iter.next(); if ((parameter.equals(key) && this.exactMatch) - || (parameter.matches(key) && !this.exactMatch)) { + || (parameter.matches(key) && !this.exactMatch)) { final Filter filter = (Filter) this.delegators.get(key); if (log.isDebugEnabled()) { log.debug("Match found for parameter [" - + this.requestParameterName + "] with value [" - + parameter + "]. Delegating to filter [" - + filter.getClass().getName() + "]"); + + this.requestParameterName + "] with value [" + + parameter + "]. Delegating to filter [" + + filter.getClass().getName() + "]"); } filter.doFilter(request, response, filterChain); return; @@ -75,7 +108,7 @@ public final class DelegatingFilter implements Filter { } log.debug("No match found for parameter [" + this.requestParameterName - + "] with value [" + parameter + "]"); + + "] with value [" + parameter + "]"); if (this.defaultFilter != null) { this.defaultFilter.doFilter(request, response, filterChain); @@ -87,59 +120,4 @@ public final class DelegatingFilter implements Filter { public void init(final FilterConfig filterConfig) throws ServletException { // nothing to do here. } - - public void init() { - CommonUtils.assertNotNull(this.requestParameterName, - "requestParameterName cannot be null."); - CommonUtils.assertTrue(!this.delegators.isEmpty(), - "delegators cannot be empty."); - - for (final Iterator iter = this.delegators.keySet().iterator(); iter - .hasNext();) { - final Object object = this.delegators.get(iter.next()); - - if (!Filter.class.isAssignableFrom(object.getClass())) { - throw new IllegalArgumentException( - "All value objects in the delegators map must be filters."); - } - } - } - - /** - * Sets the map of delegating filters. - * - * @param delegators the map of delegators to set. - */ - public void setDelegators(final Map delegators) { - this.delegators = delegators; - } - - /** - * Marks whether the value of the parameter needs to match exactly or not. - * - * @param exactMatch the value of whether we need to match exactly or not. - */ - public void setExactMatch(final boolean exactMatch) { - this.exactMatch = exactMatch; - } - - /** - * Sets the name of the request parameter to monitor. - * - * @param requestParameterName the name of the request parameter. - */ - public void setRequestParameterName(final String requestParameterName) { - this.requestParameterName = requestParameterName; - } - - /** - * Sets the default filter to use if there are no matches. This is optional - * as the filter will just continue on the chain if there is no default. - * - * @param defaultFilter the filter to use by default. - */ - protected void setDefaultFilter(final Filter defaultFilter) { - this.defaultFilter = defaultFilter; - } - } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/FilterToBeanProxy.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/FilterToBeanProxy.java index 7d1ed1d..a31825b 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/util/FilterToBeanProxy.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/FilterToBeanProxy.java @@ -5,6 +5,8 @@ */ package org.jasig.cas.client.util; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; @@ -14,52 +16,55 @@ import java.io.IOException; /** * Utility class to retrieve a Filter from a Spring-managed configuration file. * Based on the FilterToBeanProxy class in Acegi Security (but simplified) - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public class FilterToBeanProxy implements Filter { - /** The filter we are proxying. */ + /** + * The filter we are proxying. + */ private Filter filter; - public void destroy() { + /** + * Instance of commons logging. + */ + protected final Log log = LogFactory.getLog(this.getClass()); + + public final void destroy() { // nothing to do } public final void doFilter(final ServletRequest request, - final ServletResponse response, final FilterChain chain) - throws IOException, ServletException { + final ServletResponse response, final FilterChain chain) + throws IOException, ServletException { this.filter.doFilter(request, response, chain); } public final void init(final FilterConfig filterConfig) - throws ServletException { - doInit(filterConfig); - } - - protected ApplicationContext getContext(FilterConfig filterConfig) { - return WebApplicationContextUtils - .getRequiredWebApplicationContext(filterConfig.getServletContext()); - } - - public final void doInit(final FilterConfig filterConfig) - throws ServletException { + throws ServletException { final String targetBean = filterConfig.getInitParameter("targetBean"); if (CommonUtils.isBlank(targetBean)) { throw new ServletException( - "init-parameter missing: targetBean is required."); + "init-parameter missing: targetBean is required."); } final ApplicationContext ctx = this.getContext(filterConfig); if (!ctx.containsBean(targetBean)) { throw new ServletException("targetBean '" + targetBean - + "' not found in context"); + + "' not found in context"); } + log.trace("Loading filter from Spring ApplicationContext with name: " + targetBean); this.filter = (Filter) ctx.getBean(targetBean, Filter.class); } + + protected ApplicationContext getContext(FilterConfig filterConfig) { + return WebApplicationContextUtils + .getRequiredWebApplicationContext(filterConfig.getServletContext()); + } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/util/XmlUtils.java b/cas-client-core/src/main/java/org/jasig/cas/client/util/XmlUtils.java index cbfdfb5..e78bd50 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/util/XmlUtils.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/util/XmlUtils.java @@ -5,10 +5,6 @@ */ package org.jasig.cas.client.util; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xml.sax.Attributes; @@ -18,21 +14,27 @@ import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; + /** * Common utilities for easily parsing XML without duplicating logic. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class XmlUtils { - /** Static instance of Commons Logging. */ + /** + * Static instance of Commons Logging. + */ private final static Log LOG = LogFactory.getLog(XmlUtils.class); /** * Get an instance of an XML reader from the XMLReaderFactory. - * + * * @return the XMLReader. */ public static XMLReader getXmlReader() { @@ -46,32 +48,33 @@ public final class XmlUtils { /** * Retrieve the text for a group of elements. Each text element is an entry * in a list. - * + * * @param xmlAsString the xml response - * @param element the element to look for + * @param element the element to look for * @return the list of text from the elements. */ public static List getTextForElements(final String xmlAsString, - final String element) { - final List elements = new ArrayList(); + final String element) { + // XXX: optimized to 2, as most proxy chains have a length of no more than two + final List elements = new ArrayList(2); final XMLReader reader = getXmlReader(); - final DefaultHandler handler = new DefaultHandler(){ + final DefaultHandler handler = new DefaultHandler() { private boolean foundElement = false; private StringBuffer buffer = new StringBuffer(); public void startElement(final String uri, final String localName, - final String qName, final Attributes attributes) - throws SAXException { + final String qName, final Attributes attributes) + throws SAXException { if (localName.equals(element)) { this.foundElement = true; } } public void endElement(final String uri, final String localName, - final String qName) throws SAXException { + final String qName) throws SAXException { if (localName.equals(element)) { this.foundElement = false; elements.add(this.buffer.toString()); @@ -80,7 +83,7 @@ public final class XmlUtils { } public void characters(char[] ch, int start, int length) - throws SAXException { + throws SAXException { if (this.foundElement) { this.buffer.append(ch, start, length); } @@ -103,37 +106,37 @@ public final class XmlUtils { /** * Retrieve the text for a specific element (when we know there is only * one). - * + * * @param xmlAsString the xml response - * @param element the element to look for + * @param element the element to look for * @return the text value of the element. */ public static String getTextForElement(final String xmlAsString, - final String element) { + final String element) { final XMLReader reader = getXmlReader(); final StringBuffer buffer = new StringBuffer(); - final DefaultHandler handler = new DefaultHandler(){ + final DefaultHandler handler = new DefaultHandler() { private boolean foundElement = false; public void startElement(final String uri, final String localName, - final String qName, final Attributes attributes) - throws SAXException { + final String qName, final Attributes attributes) + throws SAXException { if (localName.equals(element)) { this.foundElement = true; } } public void endElement(final String uri, final String localName, - final String qName) throws SAXException { + final String qName) throws SAXException { if (localName.equals(element)) { this.foundElement = false; } } public void characters(char[] ch, int start, int length) - throws SAXException { + throws SAXException { if (this.foundElement) { buffer.append(ch, start, length); } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java index 4b01983..551809e 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AbstractUrlBasedTicketValidator.java @@ -12,28 +12,36 @@ import java.net.URLEncoder; /** * Abstract class for validating tickets that defines a workflow that all ticket * validation should follow. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public abstract class AbstractUrlBasedTicketValidator implements - TicketValidator { + TicketValidator { - /** Instance of Commons Logging. */ - protected Log log = LogFactory.getLog(this.getClass()); + /** + * Instance of Commons Logging. + */ + protected final Log log = LogFactory.getLog(this.getClass()); - /** Url to CAS server. */ - private String casServerUrl; + /** + * Url to CAS server. + */ + private final String casServerUrl; - /** Whether this client is looking for an authentication from renew. */ - private boolean renew; + /** + * Whether this client is looking for an authentication from renew. + */ + private final boolean renew; - /** Instance of HttpClient for connecting to server. */ - private HttpClient httpClient; + /** + * Instance of HttpClient for connecting to server. + */ + private final HttpClient httpClient; public final Assertion validate(final String ticketId, final Service service) - throws ValidationException { + throws ValidationException { final String url = constructURL(ticketId, service); final String response = getResponseFromURL(url); @@ -41,13 +49,13 @@ public abstract class AbstractUrlBasedTicketValidator implements } protected abstract String constructURL(final String ticketId, - final Service service); + final Service service); protected abstract Assertion parseResponse(final String response) - throws ValidationException; + throws ValidationException; private String getResponseFromURL(final String url) - throws ValidationException { + throws ValidationException { final GetMethod method = new GetMethod(url); try { @@ -56,24 +64,25 @@ public abstract class AbstractUrlBasedTicketValidator implements } catch (Exception e) { log.error(e, e); throw new ValidationException( - "Unable to retrieve response from CAS Server.", e); + "Unable to retrieve response from CAS Server.", e); } finally { method.releaseConnection(); } } - public final void init() { - CommonUtils.assertNotNull(this.casServerUrl, - "the validationUrl cannot be null"); + protected AbstractUrlBasedTicketValidator(final String casServerUrl, final boolean renew, final HttpClient httpClient) { + CommonUtils.assertNotNull(casServerUrl, + "the validationUrl cannot be null"); CommonUtils - .assertNotNull(this.httpClient, "httpClient cannot be null."); - - afterPropertiesSetInternal(); + .assertNotNull(httpClient, "httpClient cannot be null."); + this.casServerUrl = casServerUrl; + this.renew = renew; + this.httpClient = httpClient; } /** * Helper method to encode the service url. - * + * * @param service the service url to encode. * @return the encoded service url. */ @@ -92,26 +101,4 @@ public abstract class AbstractUrlBasedTicketValidator implements protected final boolean isRenew() { return this.renew; } - - public final void setCasServerUrl(final String casServerUrl) { - this.casServerUrl = casServerUrl; - } - - public final void setHttpClient(final HttpClient httpClient) { - this.httpClient = httpClient; - } - - public final void setRenew(final boolean renew) { - this.renew = renew; - } - - /** - * Template method for afterProperties() for subclasses to call. - * - * @throws Exception - */ - protected void afterPropertiesSetInternal() { - // template method - } - } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Assertion.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Assertion.java index 3bfd34e..eda5efb 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Assertion.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Assertion.java @@ -5,14 +5,14 @@ */ package org.jasig.cas.client.validation; +import org.jasig.cas.authentication.principal.Principal; + import java.io.Serializable; import java.util.Map; -import org.jasig.cas.authentication.principal.Principal; - /** * Interface to represent a successful response from the CAS Server. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -21,7 +21,7 @@ public interface Assertion extends Serializable { /** * Method to retrieve the principal. - * + * * @return the principal. */ Principal getPrincipal(); @@ -30,14 +30,14 @@ public interface Assertion extends Serializable { * Map of attributes returned by the CAS server. A client must know what * attributes he is looking for as CAS makes no claims about what attributes * are returned. - * + * * @return the map of attributes. */ Map getAttributes(); /** * Method to retrieve the proxyGrantingTicket Id. - * + * * @return the ProxyGrantingTicket Id if one exists, otherwise null. */ String getProxyGrantingTicketId(); diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AssertionImpl.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AssertionImpl.java index 2e444db..acc23ea 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/AssertionImpl.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/AssertionImpl.java @@ -13,14 +13,16 @@ import java.util.Map; /** * Concrete implementation of an Assertion. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public class AssertionImpl implements Assertion { - /** Unique id for serialization. */ + /** + * Unique id for serialization. + */ private static final long serialVersionUID = 1L; /** @@ -29,10 +31,14 @@ public class AssertionImpl implements Assertion { */ private final Map attributes; - /** The principal who was authenticated. */ + /** + * The principal who was authenticated. + */ private final Principal principal; - /** The Proxy Granting Ticket Id returned by the server. */ + /** + * The Proxy Granting Ticket Id returned by the server. + */ private final String proxyGrantingTicketId; public AssertionImpl(final Principal principal) { @@ -40,24 +46,24 @@ public class AssertionImpl implements Assertion { } public AssertionImpl(final Principal principal, final Map attributes, - final String proxyGrantingTicketId) { + final String proxyGrantingTicketId) { CommonUtils.assertNotNull(principal, "principal cannot be null"); this.principal = principal; this.attributes = attributes == null ? new HashMap() : attributes; this.proxyGrantingTicketId = CommonUtils - .isNotEmpty(proxyGrantingTicketId) ? proxyGrantingTicketId : null; + .isNotEmpty(proxyGrantingTicketId) ? proxyGrantingTicketId : null; } - public Map getAttributes() { + public final Map getAttributes() { return this.attributes; } - public Principal getPrincipal() { + public final Principal getPrincipal() { return this.principal; } - public String getProxyGrantingTicketId() { + public final String getProxyGrantingTicketId() { return this.proxyGrantingTicketId; } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidator.java index e45c0fa..3a003b9 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas10TicketValidator.java @@ -5,40 +5,45 @@ */ package org.jasig.cas.client.validation; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.StringReader; - +import org.apache.commons.httpclient.HttpClient; import org.jasig.cas.authentication.principal.Principal; import org.jasig.cas.authentication.principal.Service; import org.jasig.cas.authentication.principal.SimplePrincipal; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; + /** * Implementation of TicketValidator that follows the CAS 1.0 protocol. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ -public class Cas10TicketValidator extends AbstractUrlBasedTicketValidator { +public final class Cas10TicketValidator extends AbstractUrlBasedTicketValidator { + + public Cas10TicketValidator(final String casServerUrl, final boolean renew, final HttpClient httpClient) { + super(casServerUrl, renew, httpClient); + } protected String constructURL(final String ticketId, final Service service) { return getCasServerUrl() + "validate?ticket=" + ticketId - + (isRenew() ? "&renew=true" : "") + "&service=" - + getEncodedService(service); + + (isRenew() ? "&renew=true" : "") + "&service=" + + getEncodedService(service); } protected final Assertion parseResponse(final String response) - throws ValidationException { + throws ValidationException { if (response == null || "no\n\n".equals(response) - || !response.startsWith("yes")) { + || !response.startsWith("yes")) { throw new ValidationException( - "'No' response returned from server for validation request."); + "'No' response returned from server for validation request."); } try { final BufferedReader reader = new BufferedReader(new StringReader( - response)); + response)); reader.readLine(); final Principal principal = new SimplePrincipal(reader.readLine()); diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java index 07f27fe..e8bf119 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidator.java @@ -5,20 +5,27 @@ */ package org.jasig.cas.client.validation; +import org.apache.commons.httpclient.HttpClient; +import org.jasig.cas.authentication.principal.Service; +import org.jasig.cas.authentication.principal.SimpleService; +import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage; +import org.jasig.cas.client.util.CommonUtils; +import org.jasig.cas.client.util.XmlUtils; + import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; -import org.jasig.cas.authentication.principal.Service; -import org.jasig.cas.authentication.principal.SimpleService; -import org.jasig.cas.client.util.CommonUtils; -import org.jasig.cas.client.util.XmlUtils; - /** * Implementation of the TicketValidator interface that knows how to handle * proxy tickets. - * + *

+ * In your XML configuration file, proxy chains should be defined as + * follows: <list> <value> proxy1 proxy2 proxy3</value> + * <value> proxy2 proxy4 proxy5</value> <value> proxy4 + * proxy5 proxy6</value> </list> + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -26,17 +33,58 @@ import org.jasig.cas.client.util.XmlUtils; public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator { /* List of proxy chains that we accept. */ - private List proxyChains; + private final List proxyChains; - /** Boolean whether we accept any proxy request or not. */ - private boolean acceptAnyProxy; + /** + * Boolean whether we accept any proxy request or not. + */ + private final boolean acceptAnyProxy; + + /** + * @param casServerUrl the url to the CAS server, minus the endpoint. + * @param renew flag for whether we require authentication to be via an initial authentication. + * @param httpClient an instance of HttpClient to do the calls. + * @param proxyGrantingTicketStorage a reference to the storage of the proxy tickets. + * @param proxyChains the chains of proxy lists that we accept tickets from. + * @param acceptAnyProxy flag on whether we accept any proxy or not. + */ + public Cas20ProxyTicketValidator(final String casServerUrl, final boolean renew, final HttpClient httpClient, final ProxyGrantingTicketStorage proxyGrantingTicketStorage, List proxyChains, boolean acceptAnyProxy) { + this(casServerUrl, renew, httpClient, null, proxyGrantingTicketStorage, proxyChains, acceptAnyProxy); + } + + public Cas20ProxyTicketValidator(final String casServerUrl, final boolean renew, final HttpClient httpClient, final Service proxyCallbackUrl, final ProxyGrantingTicketStorage proxyGrantingTicketStorage, List proxyChains, boolean acceptAnyProxy) { + super(casServerUrl, renew, httpClient, proxyCallbackUrl, proxyGrantingTicketStorage); + + CommonUtils.assertTrue(proxyChains != null || acceptAnyProxy, + "proxyChains cannot be null or acceptAnyProxy must be true."); + CommonUtils.assertTrue((proxyChains != null && !proxyChains + .isEmpty()) + || acceptAnyProxy, + "proxyChains cannot be empty or acceptAnyProxy must be true."); + + // assume each proxy chain has a length of 2 + final List tempProxyChains = new ArrayList(proxyChains.size() * 2); + for (final Iterator iter = proxyChains.iterator(); iter.hasNext();) { + final String[] values = ((String) iter.next()).split(" "); + final Service[] principals = new Service[values.length]; + + for (int i = 0; i < principals.length; i++) { + principals[i] = new SimpleService(values[i]); + } + + tempProxyChains.add(principals); + } + + this.proxyChains = tempProxyChains; + this.acceptAnyProxy = acceptAnyProxy; + } protected String getValidationUrlName() { return "proxyValidate"; } protected Assertion getValidAssertionInternal(final String response, - final Assertion assertion) throws ValidationException { + final Assertion assertion) throws ValidationException { final List proxies = XmlUtils.getTextForElements(response, "proxy"); final Service[] principals = new Service[proxies.size()]; @@ -63,53 +111,6 @@ public class Cas20ProxyTicketValidator extends Cas20ServiceTicketValidator { } return new AssertionImpl(assertion.getPrincipal(), assertion - .getAttributes(), assertion.getProxyGrantingTicketId()); - } - - /** - * In your XML configuration file, proxy chains should be defined as - * follows: <list> <value> proxy1 proxy2 proxy3</value> - * <value> proxy2 proxy4 proxy5</value> <value> proxy4 - * proxy5 proxy6</value> </list> - * - * @param proxyChains - */ - public final void setProxyChains(final List proxyChains) { - this.proxyChains = proxyChains; - } - - /** - * Set this flag to true if you don't care where the proxied request came - * from. - * - * @param acceptAnyProxy flag on whether we accept any proxy or not. - */ - public void setAcceptAnyProxy(final boolean acceptAnyProxy) { - this.acceptAnyProxy = acceptAnyProxy; - } - - protected void afterPropertiesSetInternal() { - super.afterPropertiesSetInternal(); - - CommonUtils.assertTrue(this.proxyChains != null || this.acceptAnyProxy, - "proxyChains cannot be null or acceptAnyProxy must be true."); - CommonUtils.assertTrue((this.proxyChains != null && !this.proxyChains - .isEmpty()) - || this.acceptAnyProxy, - "proxyChains cannot be empty or acceptAnyProxy must be true."); - - final List tempProxyChains = new ArrayList(); - for (final Iterator iter = this.proxyChains.iterator(); iter.hasNext();) { - final String[] values = ((String) iter.next()).split(" "); - final Service[] principals = new Service[values.length]; - - for (int i = 0; i < principals.length; i++) { - principals[i] = new SimpleService(values[i]); - } - - tempProxyChains.add(principals); - } - - this.proxyChains = tempProxyChains; + .getAttributes(), assertion.getProxyGrantingTicketId()); } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java index a05c9b7..be83f95 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidator.java @@ -5,9 +5,9 @@ */ package org.jasig.cas.client.validation; +import org.apache.commons.httpclient.HttpClient; import org.jasig.cas.authentication.principal.Service; import org.jasig.cas.authentication.principal.SimplePrincipal; -import org.jasig.cas.authentication.principal.SimpleService; import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage; import org.jasig.cas.client.util.CommonUtils; import org.jasig.cas.client.util.XmlUtils; @@ -15,37 +15,53 @@ import org.jasig.cas.client.util.XmlUtils; /** * Implementation of TicketValidator that follows the CAS 2.0 protocol (without * proxying). - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public class Cas20ServiceTicketValidator extends - AbstractUrlBasedTicketValidator { + AbstractUrlBasedTicketValidator { - /** Proxy callback url to send to the CAS server. */ - private Service proxyCallbackUrl; + /** + * Proxy callback url to send to the CAS server. + */ + private final Service proxyCallbackUrl; - /** The storage mechanism for the ProxyGrantingTickets. */ - private ProxyGrantingTicketStorage proxyGrantingTicketStorage; + /** + * The storage mechanism for the ProxyGrantingTickets. + */ + private final ProxyGrantingTicketStorage proxyGrantingTicketStorage; + + public Cas20ServiceTicketValidator(final String casServerUrl, final boolean renew, final HttpClient httpClient, final ProxyGrantingTicketStorage proxyGrantingTicketStorage) { + this(casServerUrl, renew, httpClient, null, proxyGrantingTicketStorage); + } + + public Cas20ServiceTicketValidator(final String casServerUrl, final boolean renew, final HttpClient httpClient, final Service proxyCallbackUrl, final ProxyGrantingTicketStorage proxyGrantingTicketStorage) { + super(casServerUrl, renew, httpClient); + CommonUtils.assertNotNull(proxyGrantingTicketStorage, + "proxyGrantingTicketStorage cannot be null"); + this.proxyCallbackUrl = proxyCallbackUrl; + this.proxyGrantingTicketStorage = proxyGrantingTicketStorage; + } protected String constructURL(final String ticketId, - final Service service) { + final Service service) { return getCasServerUrl() - + getValidationUrlName() - + "?ticket=" - + ticketId - + (isRenew() ? "&renew=true" : "") - + "&service=" - + getEncodedService(service) - + (this.proxyCallbackUrl != null ? "&pgtUrl=" + + getValidationUrlName() + + "?ticket=" + + ticketId + + (isRenew() ? "&renew=true" : "") + + "&service=" + + getEncodedService(service) + + (this.proxyCallbackUrl != null ? "&pgtUrl=" + getEncodedService(this.proxyCallbackUrl) : ""); } protected final Assertion parseResponse(String response) - throws ValidationException { + throws ValidationException { final String error = XmlUtils.getTextForElement(response, - "authenticationFailure"); + "authenticationFailure"); if (CommonUtils.isNotBlank(error)) { log.debug("Validation of ticket failed: " + error); @@ -54,7 +70,7 @@ public class Cas20ServiceTicketValidator extends final String principal = XmlUtils.getTextForElement(response, "user"); final String proxyGrantingTicketIou = XmlUtils.getTextForElement( - response, "proxyGrantingTicket"); + response, "proxyGrantingTicket"); if (CommonUtils.isEmpty(principal)) { throw new ValidationException("No principal found."); @@ -62,13 +78,13 @@ public class Cas20ServiceTicketValidator extends if (CommonUtils.isNotBlank(proxyGrantingTicketIou)) { return getValidAssertionInternal(response, new AssertionImpl( - new SimplePrincipal(principal), null, - this.proxyGrantingTicketStorage - .retrieve(proxyGrantingTicketIou))); + new SimplePrincipal(principal), null, + this.proxyGrantingTicketStorage + .retrieve(proxyGrantingTicketIou))); } return getValidAssertionInternal(response, new AssertionImpl( - new SimplePrincipal(principal))); + new SimplePrincipal(principal))); } protected String getValidationUrlName() { @@ -76,32 +92,7 @@ public class Cas20ServiceTicketValidator extends } protected Assertion getValidAssertionInternal(final String response, - final Assertion assertion) throws ValidationException { + final Assertion assertion) throws ValidationException { return assertion; } - - /** - * Sets the proxy callback url - * - * @param proxyCallbackUrl the proxycallback url specified for this - * application. - */ - public final void setProxyCallbackUrl(final String proxyCallbackUrl) { - this.proxyCallbackUrl = new SimpleService(proxyCallbackUrl); - } - - /** - * Sets the ProxyGrantingTicketStorage - * - * @param proxyGrantingTicketStorage the storage mechanism to use. - */ - public final void setProxyGrantingTicketStorage( - final ProxyGrantingTicketStorage proxyGrantingTicketStorage) { - this.proxyGrantingTicketStorage = proxyGrantingTicketStorage; - } - - protected void afterPropertiesSetInternal() { - CommonUtils.assertNotNull(this.proxyGrantingTicketStorage, - "proxyGrantingTicketStorage cannot be null"); - } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/InvalidProxyChainValidationException.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/InvalidProxyChainValidationException.java index 4ce7bd2..70dd317 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/InvalidProxyChainValidationException.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/InvalidProxyChainValidationException.java @@ -8,29 +8,23 @@ package org.jasig.cas.client.validation; /** * Specific instance of a ValidationException that is thrown when the proxy * chain does not match what is returned. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class InvalidProxyChainValidationException extends ValidationException { - /** Unique id for serialization. */ + /** + * Unique id for serialization. + */ private static final long serialVersionUID = 1L; public InvalidProxyChainValidationException() { super(); } - public InvalidProxyChainValidationException(String message, Throwable cause) { - super(message, cause); - } - public InvalidProxyChainValidationException(String message) { super(message); } - - public InvalidProxyChainValidationException(Throwable cause) { - super(cause); - } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/TicketValidator.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/TicketValidator.java index 5eadddc..0e76218 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/TicketValidator.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/TicketValidator.java @@ -11,7 +11,7 @@ import org.jasig.cas.authentication.principal.Service; * Interface to encapsulate the validation of a ticket. The inteface is * specification neutral. Any implementation can be provided, including * something that parses CAS1 or CAS2 responses. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -20,12 +20,12 @@ public interface TicketValidator { /** * Method to validate a ticket for a give Service. - * + * * @param ticketId the ticket to validate - * @param service the service to validate the ticket for + * @param service the service to validate the ticket for * @return the Assertion about the ticket (never null) * @throws ValidationException if there is a problem validating the ticket. */ Assertion validate(String ticketId, Service service) - throws ValidationException; + throws ValidationException; } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ValidationException.java b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ValidationException.java index ae17505..2a2741c 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/validation/ValidationException.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/validation/ValidationException.java @@ -8,14 +8,16 @@ package org.jasig.cas.client.validation; /** * Implementation of Exception to be thrown when there is an error validating * the Ticket returned from the CAS server. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public class ValidationException extends Exception { - /** Unique Id for serialization. */ + /** + * Unique Id for serialization. + */ private static final long serialVersionUID = 1L; /** @@ -27,8 +29,9 @@ public class ValidationException extends Exception { /** * Constructor that accepts a message and a chained exception. + * * @param message the error message. - * @param cause the exception we are chaining with. + * @param cause the exception we are chaining with. */ public ValidationException(final String message, final Throwable cause) { super(message, cause); @@ -36,6 +39,7 @@ public class ValidationException extends Exception { /** * Constructor that accepts a message. + * * @param message the error message. */ public ValidationException(final String message) { @@ -44,6 +48,7 @@ public class ValidationException extends Exception { /** * Constructor that accepts a chained exception. + * * @param cause the exception we are chaining with. */ public ValidationException(final Throwable cause) { diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/AbstractCasFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/AbstractCasFilter.java index e3eeae4..f4feddb 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/AbstractCasFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/AbstractCasFilter.java @@ -9,29 +9,26 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jasig.cas.client.util.CommonUtils; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Abstract class that contains common functionality amongst CAS filters. - *

- * You must specify the serverName or the serviceUrl. If you specify both, the + *

+ * You must specify the serverName (format: hostname:port) or the serviceUrl. If you specify both, the * serviceUrl is used over the serverName. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public abstract class AbstractCasFilter implements Filter { - /** Constant string representing the ticket parameter. */ + /** + * Constant string representing the ticket parameter. + */ public static final String PARAM_TICKET = "ticket"; /** @@ -40,41 +37,66 @@ public abstract class AbstractCasFilter implements Filter { */ public static final String CONST_ASSERTION = "_cas_assertion_"; - /** Constant representing where we flag a gatewayed request in the session. */ + /** + * Constant representing where we flag a gatewayed request in the session. + */ public static final String CONST_GATEWAY = "_cas_gateway_"; - /** Constant representing where we flag a principal. */ + /** + * Constant representing where we flag a principal. + */ public static final String CONST_PRINCIPAL = "_cas_principal_"; - /** Instance of Commons Logging. */ + /** + * Instance of Commons Logging. + */ protected final Log log = LogFactory.getLog(this.getClass()); /** * The name of the server in the following format: : where * port is optional if its a standard port. */ - private String serverName; + private final String serverName; - /** The exact service url to match to. */ - private String serviceUrl; + /** + * The exact service url to match to. + */ + private final String serviceUrl; - /** Whether to store the entry in session or not. Defaults to true. */ - private boolean useSession = true; + /** + * Whether to store the entry in session or not. Defaults to true. + */ + private final boolean useSession; + + + protected AbstractCasFilter(final String serverName, final String serviceUrl) { + this(serverName, serviceUrl, true); + } + + protected AbstractCasFilter(final String serverName, final String serviceUrl, final boolean useSession) { + CommonUtils.assertTrue(CommonUtils.isNotBlank(serverName) + || CommonUtils.isNotBlank(serviceUrl), + "either serverName or serviceUrl must be set"); + + this.serverName = serverName; + this.serviceUrl = serviceUrl; + this.useSession = useSession; + } public final void destroy() { // nothing to do } public final void doFilter(final ServletRequest servletRequest, - final ServletResponse servletResponse, final FilterChain filterChain) - throws IOException, ServletException { + final ServletResponse servletResponse, final FilterChain filterChain) + throws IOException, ServletException { doFilterInternal((HttpServletRequest) servletRequest, - (HttpServletResponse) servletResponse, filterChain); + (HttpServletResponse) servletResponse, filterChain); } protected abstract void doFilterInternal(HttpServletRequest request, - HttpServletResponse response, FilterChain filterChain) - throws IOException, ServletException; + HttpServletResponse response, FilterChain filterChain) + throws IOException, ServletException; public void init(final FilterConfig filterConfig) throws ServletException { // nothing to do here @@ -84,13 +106,13 @@ public abstract class AbstractCasFilter implements Filter { * Constructs a service url from the HttpServletRequest or from the given * serviceUrl. Prefers the serviceUrl provided if both a serviceUrl and a * serviceName. - * - * @param request the HttpServletRequest + * + * @param request the HttpServletRequest * @param response the HttpServletResponse * @return the service url to use. */ protected final String constructServiceUrl(final HttpServletRequest request, - final HttpServletResponse response) { + final HttpServletResponse response) { if (CommonUtils.isNotBlank(this.serviceUrl)) { return response.encodeURL(this.serviceUrl); } @@ -104,11 +126,11 @@ public abstract class AbstractCasFilter implements Filter { if (CommonUtils.isNotBlank(request.getQueryString())) { final int location = request.getQueryString().indexOf( - PARAM_TICKET + "="); + PARAM_TICKET + "="); if (location == 0) { final String returnValue = response.encodeURL(buffer - .toString()); + .toString()); if (log.isDebugEnabled()) { log.debug("serviceUrl generated: " + returnValue); } @@ -121,13 +143,13 @@ public abstract class AbstractCasFilter implements Filter { buffer.append(request.getQueryString()); } else if (location > 0) { final int actualLocation = request.getQueryString() - .indexOf("&" + PARAM_TICKET + "="); + .indexOf("&" + PARAM_TICKET + "="); if (actualLocation == -1) { buffer.append(request.getQueryString()); } else if (actualLocation > 0) { buffer.append(request.getQueryString().substring(0, - actualLocation)); + actualLocation)); } } } @@ -143,39 +165,4 @@ public abstract class AbstractCasFilter implements Filter { protected final boolean isUseSession() { return this.useSession; } - - protected final void setUseSession(final boolean useSession) { - this.useSession = useSession; - } - - /** - * Sets the serverName which should be of the format : - * where port is optional if its a standard port. Either the serverName or - * the serviceUrl must be set. - * - * @param serverName the : combination. - */ - public final void setServerName(final String serverName) { - this.serverName = serverName; - } - - public final void setServiceUrl(final String serviceUrl) { - this.serviceUrl = serviceUrl; - } - - public final void init() { - CommonUtils.assertTrue(CommonUtils.isNotBlank(this.serverName) - || CommonUtils.isNotBlank(this.serviceUrl), - "either serverName or serviceUrl must be set"); - afterPropertiesSetInternal(); - } - - /** - * Template method for additional checks at initialization. - * - * @throws Exception any exceptions thrown upon initialization. - */ - protected void afterPropertiesSetInternal() { - // template method - } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthenticationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthenticationFilter.java index 2180008..4de0fb2 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthenticationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthenticationFilter.java @@ -5,46 +5,68 @@ */ package org.jasig.cas.client.web.filter; -import java.io.IOException; -import java.net.URLEncoder; +import org.jasig.cas.client.util.CommonUtils; +import org.jasig.cas.client.validation.Assertion; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; - -import org.jasig.cas.client.util.CommonUtils; -import org.jasig.cas.client.validation.Assertion; +import java.io.IOException; +import java.net.URLEncoder; /** * Filter implementation to intercept all requests and attempt to authenticate * the user by redirecting them to CAS (unless the user has a ticket). - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class CasAuthenticationFilter extends AbstractCasFilter { - /** The URL to the CAS Server login. */ - private String casServerLoginUrl; + /** + * The URL to the CAS Server login. + */ + private final String casServerLoginUrl; - /** Whether to send the renew request or not. */ - private boolean renew; + /** + * Whether to send the renew request or not. + */ + private final boolean renew; - /** Whether to send the gateway request or not. */ - private boolean gateway; + /** + * Whether to send the gateway request or not. + */ + private final boolean gateway; + + public CasAuthenticationFilter(final String serverName, final String serviceUrl, final String casServerLoginUrl) { + this(serverName, serviceUrl, true, casServerLoginUrl, false, false); + } + + public CasAuthenticationFilter(final String serverName, final String serviceUrl, final String casServerLoginUrl, boolean renew, boolean gateway) { + this(serverName, serviceUrl, true, casServerLoginUrl, renew, gateway); + } + + public CasAuthenticationFilter(String serverName, String serviceUrl, boolean useSession, String casServerLoginUrl, boolean renew, boolean gateway) { + super(serverName, serviceUrl, useSession); + CommonUtils.assertNotNull(casServerLoginUrl, + "the CAS Server Login URL cannot be null."); + this.casServerLoginUrl = casServerLoginUrl; + this.renew = renew; + this.gateway = gateway; + } protected void doFilterInternal(final HttpServletRequest request, - final HttpServletResponse response, final FilterChain filterChain) - throws IOException, ServletException { + final HttpServletResponse response, final FilterChain filterChain) + throws IOException, ServletException { final HttpSession session = request.getSession(isUseSession()); final String ticket = request.getParameter(PARAM_TICKET); final Assertion assertion = session != null ? (Assertion) session - .getAttribute(CONST_ASSERTION) : null; + .getAttribute(CONST_ASSERTION) : null; final boolean wasGatewayed = session != null - && session.getAttribute(CONST_GATEWAY) != null; + && session.getAttribute(CONST_GATEWAY) != null; if (CommonUtils.isBlank(ticket) && assertion == null && !wasGatewayed) { if (this.gateway && session != null) { @@ -53,9 +75,9 @@ public final class CasAuthenticationFilter extends AbstractCasFilter { final String serviceUrl = constructServiceUrl(request, response); final String urlToRedirectTo = this.casServerLoginUrl + "?service=" - + URLEncoder.encode(serviceUrl, "UTF-8") - + (this.renew ? "&renew=true" : "") - + (this.gateway ? "&gateway=true" : ""); + + URLEncoder.encode(serviceUrl, "UTF-8") + + (this.renew ? "&renew=true" : "") + + (this.gateway ? "&gateway=true" : ""); response.sendRedirect(urlToRedirectTo); return; } @@ -66,21 +88,4 @@ public final class CasAuthenticationFilter extends AbstractCasFilter { filterChain.doFilter(request, response); } - - public void setCasServerLoginUrl(final String casServerLoginUrl) { - this.casServerLoginUrl = casServerLoginUrl; - } - - public void setGateway(final boolean gateway) { - this.gateway = gateway; - } - - public void setRenew(final boolean renew) { - this.renew = renew; - } - - protected void afterPropertiesSetInternal() { - CommonUtils.assertNotNull(this.casServerLoginUrl, - "the CAS Server Login URL cannot be null."); - } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthorizationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthorizationFilter.java index 3ed2737..8f981a7 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthorizationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasAuthorizationFilter.java @@ -20,17 +20,17 @@ import java.io.IOException; * Simple filter that attempts to determine if someone is authorized to use the * system. Assumes that you are protecting the application with the * AuthenticationFilter such that the Assertion is set in the session. - *

+ *

* If a user is not authorized to use the application, the response code of 403 * will be sent to the browser. - *

+ *

* This filter needs to be configured after both the authentication filter and * the validation filter. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ - * @since 3.0 * @see CasAuthorizedDecider + * @since 3.0 */ public final class CasAuthorizationFilter implements Filter { @@ -38,34 +38,43 @@ public final class CasAuthorizationFilter implements Filter { * Decider that determines whether a specified principal has access to the * resource or not. */ - private CasAuthorizedDecider decider; + private final CasAuthorizedDecider decider; + + /** + * @param casAuthorizedDecider the thing actually deciding to grant access or not. + */ + public CasAuthorizationFilter(final CasAuthorizedDecider casAuthorizedDecider) { + CommonUtils.assertNotNull(casAuthorizedDecider, + "the casAuthorizedDecider cannot be null."); + this.decider = casAuthorizedDecider; + } public void destroy() { // nothing to do here } public void doFilter(final ServletRequest servletRequest, - final ServletResponse servletResponse, final FilterChain filterChain) - throws IOException, ServletException { + final ServletResponse servletResponse, final FilterChain filterChain) + throws IOException, ServletException { final HttpServletRequest request = (HttpServletRequest) servletRequest; final HttpServletResponse response = (HttpServletResponse) servletResponse; final Assertion assertion = (Assertion) request.getSession() - .getAttribute(AbstractCasFilter.CONST_ASSERTION); + .getAttribute(AbstractCasFilter.CONST_ASSERTION); if (assertion == null) { throw new ServletException( - "assertion session attribute expected but not found."); + "assertion session attribute expected but not found."); } final Principal principal = assertion.getPrincipal(); final boolean authorized = this.decider - .isAuthorizedToUseApplication(principal); + .isAuthorizedToUseApplication(principal); if (!authorized) { response.setStatus(HttpServletResponse.SC_FORBIDDEN); throw new AuthorizationException(principal.getId() - + " is not authorized to use this application."); + + " is not authorized to use this application."); } filterChain.doFilter(servletRequest, servletResponse); @@ -73,15 +82,5 @@ public final class CasAuthorizationFilter implements Filter { public void init(final FilterConfig filterConfig) throws ServletException { // nothing to do here - - } - - public void setDecider(final CasAuthorizedDecider decider) { - this.decider = decider; - } - - public void init() { - CommonUtils.assertNotNull(this.decider, - "the casAuthorizedDecider cannot be null."); } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasValidationFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasValidationFilter.java index 799ddb5..9dd968c 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasValidationFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/CasValidationFilter.java @@ -22,30 +22,60 @@ import java.io.IOException; * will attempt to validate the ticket. On a successful validation, it sets the * Assertion object into the session. On an unsuccessful validation attempt, it * sets the response code to 403. - *

+ *

* This filter needs to be configured after the authentication filter (if that * filter exists in the chain). - * + * * @author Scott Battaglia * @version $Revision$ $Date$ - * @since 3.0 * @see TicketValidator + * @since 3.0 */ public final class CasValidationFilter extends AbstractCasFilter { - /** Instance of the ticket validator. */ - private TicketValidator ticketValidator; + /** + * Instance of the ticket validator. + */ + private final TicketValidator ticketValidator; /** * Specify whether the filter should redirect the user agent after a * successful validation to remove the ticket parameter from the query * string. */ - private boolean redirectAfterValidation; + private final boolean redirectAfterValidation; - public void doFilterInternal(final HttpServletRequest request, - final HttpServletResponse response, final FilterChain filterChain) - throws IOException, ServletException { + /** + * Constructor that takes the severName (or serviceUrl) and the TicketValidator. Either serveName or serviceUrl is required (but not both). + * + * @param serverName the name of the server in : combination, if using a non-standard port. + * @param serviceUrl the url to always redirect to. + * @param ticketValidator the validator to validate the tickets. + */ + public CasValidationFilter(final String serverName, final String serviceUrl, final TicketValidator ticketValidator) { + this(serverName, serviceUrl, true, ticketValidator, false); + } + + /** + * Constructor that takes the severName (or serviceUrl), TicketValidator, useSession and redirectAfterValidation. Either serveName or serviceUrl is required (but not both). + * + * @param serverName the name of the server in : combination, if using a non-standard port. + * @param serviceUrl the url to always redirect to. + * @param useSession flag to set whether to store stuff in the session. + * @param ticketValidator the validator to validate the tickets. + * @param redirectAfterValidation whether to redirect to remove the ticket. + */ + public CasValidationFilter(final String serverName, final String serviceUrl, final boolean useSession, final TicketValidator ticketValidator, final boolean redirectAfterValidation) { + super(serverName, serviceUrl, useSession); + CommonUtils.assertNotNull(ticketValidator, + "ticketValidator cannot be null."); + this.ticketValidator = ticketValidator; + this.redirectAfterValidation = redirectAfterValidation; + } + + protected void doFilterInternal(final HttpServletRequest request, + final HttpServletResponse response, final FilterChain filterChain) + throws IOException, ServletException { final String ticket = request.getParameter(PARAM_TICKET); if (CommonUtils.isNotBlank(ticket)) { @@ -55,19 +85,19 @@ public final class CasValidationFilter extends AbstractCasFilter { try { final Assertion assertion = this.ticketValidator.validate( - ticket, new SimpleService(constructServiceUrl(request, + ticket, new SimpleService(constructServiceUrl(request, response))); if (log.isDebugEnabled()) { log.debug("Successfully authenticated user: " - + assertion.getPrincipal().getId()); + + assertion.getPrincipal().getId()); } request.setAttribute(CONST_PRINCIPAL, assertion.getPrincipal()); if (isUseSession()) { request.getSession().setAttribute(CONST_ASSERTION, - assertion); + assertion); } } catch (final ValidationException e) { response.setStatus(HttpServletResponse.SC_FORBIDDEN); @@ -78,35 +108,10 @@ public final class CasValidationFilter extends AbstractCasFilter { if (this.redirectAfterValidation) { response.sendRedirect(response - .encodeRedirectURL(constructServiceUrl(request, response))); + .encodeRedirectURL(constructServiceUrl(request, response))); return; } filterChain.doFilter(request, response); } - - /** - * Sets the ticket validator for validating tickets. - * - * @param ticketValidator the ticket validator instance we want to use. - */ - public void setTicketValidator(final TicketValidator ticketValidator) { - this.ticketValidator = ticketValidator; - } - - /** - * Sets the flag that tells the filter to redirect after the successful - * validation. - * - * @param redirectAfterValidation true if we want to redirect, false - * otherwise. - */ - public void setRedirectAfterValidation(boolean redirectAfterValidation) { - this.redirectAfterValidation = redirectAfterValidation; - } - - protected void afterPropertiesSetInternal() { - CommonUtils.assertNotNull(this.ticketValidator, - "ticketValidator cannot be null."); - } } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilter.java b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilter.java index 3ff3408..a921a5e 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilter.java +++ b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilter.java @@ -24,10 +24,10 @@ import java.util.Map; * Implementation of a filter that wraps the normal HttpServletRequest with a * wrapper that overrides the getRemoteUser method to retrieve the user from the * CAS Assertion. - *

+ *

* This filter needs to be configured in the chain so that it executes after * both the authentication and the validation filters. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -44,22 +44,22 @@ public final class HttpServletRequestWrapperFilter implements Filter { * stored in the user session. */ public void doFilter(final ServletRequest servletRequest, - final ServletResponse servletResponse, final FilterChain filterChain) - throws IOException, ServletException { + final ServletResponse servletResponse, final FilterChain filterChain) + throws IOException, ServletException { filterChain.doFilter(new CasHttpServletRequestWrapper( - (HttpServletRequest) servletRequest), servletResponse); + (HttpServletRequest) servletRequest), servletResponse); } public void init(final FilterConfig filterConfig) throws ServletException { // nothing to do } - protected final class CasHttpServletRequestWrapper implements - HttpServletRequest { + final class CasHttpServletRequestWrapper implements + HttpServletRequest { private final HttpServletRequest request; - protected CasHttpServletRequestWrapper(final HttpServletRequest request) { + CasHttpServletRequestWrapper(final HttpServletRequest request) { this.request = request; } @@ -113,20 +113,20 @@ public final class HttpServletRequestWrapperFilter implements Filter { public String getRemoteUser() { final org.jasig.cas.authentication.principal.Principal p = (org.jasig.cas.authentication.principal.Principal) this.request - .getAttribute(AbstractCasFilter.CONST_PRINCIPAL); - + .getAttribute(AbstractCasFilter.CONST_PRINCIPAL); + if (p != null) { return p.getId(); } - + final Assertion assertion = (Assertion) WebUtils - .getSessionAttribute(this.request, - AbstractCasFilter.CONST_ASSERTION); - + .getSessionAttribute(this.request, + AbstractCasFilter.CONST_ASSERTION); + if (assertion != null) { return assertion.getPrincipal().getId(); } - + return null; } @@ -191,7 +191,7 @@ public final class HttpServletRequestWrapperFilter implements Filter { } public void setCharacterEncoding(String s) - throws UnsupportedEncodingException { + throws UnsupportedEncodingException { this.request.setCharacterEncoding(s); } diff --git a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/package.html b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/package.html index 7329dac..e567df0 100644 --- a/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/package.html +++ b/cas-client-core/src/main/java/org/jasig/cas/client/web/filter/package.html @@ -1,5 +1,6 @@ -

This package contains all of the useful filters related to normal CAS processing, including Authentication, Validation and Authorization.

+

This package contains all of the useful filters related to normal CAS processing, including Authentication, + Validation and Authorization.

diff --git a/cas-client-core/src/main/resources/simpleFilterExample.xml b/cas-client-core/src/main/resources/simpleFilterExample.xml index 39c7690..8d8ee13 100644 --- a/cas-client-core/src/main/resources/simpleFilterExample.xml +++ b/cas-client-core/src/main/resources/simpleFilterExample.xml @@ -1,77 +1,72 @@ + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - battags - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + battags + + + \ No newline at end of file diff --git a/cas-client-core/src/main/resources/web-simple-example.xml b/cas-client-core/src/main/resources/web-simple-example.xml index f83e745..372ec48 100644 --- a/cas-client-core/src/main/resources/web-simple-example.xml +++ b/cas-client-core/src/main/resources/web-simple-example.xml @@ -3,18 +3,18 @@ Java CAS Client - - - - contextConfigLocation - - /WEB-INF/simpleFilterExample.xml - - - + + + + contextConfigLocation + + /WEB-INF/simpleFilterExample.xml + + + CAS Authentication Filter Proxy org.jasig.cas.client.util.FilterToBeanProxy @@ -23,8 +23,8 @@ casAuthenticationFilter - - + + CAS Validation Filter Proxy org.jasig.cas.client.util.FilterToBeanProxy @@ -32,8 +32,8 @@ casValidationFilter - - + + CAS Authorization Filter Proxy org.jasig.cas.client.util.FilterToBeanProxy @@ -41,42 +41,42 @@ casAuthorizationFilter - - - CAS Authentication Filter Proxy - /* - - - - CAS Validation Filter Proxy - /* - - - - CAS Authorization Filter Proxy - /* - - - - - org.springframework.web.context.ContextLoaderListener - - - - casclient - org.jasig.cas.client.proxy.ProxyReceptorServlet - 1 - + + CAS Authentication Filter Proxy + /* + - - casclient - /proxy/Receptor - + + CAS Validation Filter Proxy + /* + + + + CAS Authorization Filter Proxy + /* + + + + + org.springframework.web.context.ContextLoaderListener + + + + + casclient + org.jasig.cas.client.proxy.ProxyReceptorServlet + 1 + + + + casclient + /proxy/Receptor + \ No newline at end of file diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/PublicTestHttpServer.java b/cas-client-core/src/test/java/org/jasig/cas/client/PublicTestHttpServer.java index 334510e..3b2744e 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/PublicTestHttpServer.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/PublicTestHttpServer.java @@ -1,12 +1,7 @@ package org.jasig.cas.client; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; +import java.io.*; import java.net.ServerSocket; import java.net.Socket; @@ -15,7 +10,7 @@ import java.net.Socket; * @version $Revision$ $Date$ * @since 3.0 */ -public class PublicTestHttpServer extends Thread { +public final class PublicTestHttpServer extends Thread { private static PublicTestHttpServer httpServer; @@ -28,19 +23,19 @@ public class PublicTestHttpServer extends Thread { public String encoding; private PublicTestHttpServer(String data, String encoding, String MIMEType, - int port) throws UnsupportedEncodingException { + int port) throws UnsupportedEncodingException { this(data.getBytes(encoding), encoding, MIMEType, port); } private PublicTestHttpServer(byte[] data, String encoding, String MIMEType, - int port) throws UnsupportedEncodingException { + int port) throws UnsupportedEncodingException { this.content = data; this.port = port; this.encoding = encoding; String header = "HTTP/1.0 200 OK\r\n" + "Server: OneFile 1.0\r\n" - // + "Content-length: " + this.content.length + "\r\n" - + "Content-type: " + MIMEType + "\r\n\r\n"; + // + "Content-length: " + this.content.length + "\r\n" + + "Content-type: " + MIMEType + "\r\n\r\n"; this.header = header.getBytes("ASCII"); } @@ -49,7 +44,7 @@ public class PublicTestHttpServer extends Thread { if (httpServer == null) { try { httpServer = new PublicTestHttpServer("test", "ASCII", - "text/plain", 8085); + "text/plain", 8085); } catch (Exception e) { throw new RuntimeException(e); } @@ -65,16 +60,16 @@ public class PublicTestHttpServer extends Thread { try { ServerSocket server = new ServerSocket(this.port); System.out.println("Accepting connections on port " - + server.getLocalPort()); + + server.getLocalPort()); while (true) { Socket connection = null; try { connection = server.accept(); OutputStream out = new BufferedOutputStream(connection - .getOutputStream()); + .getOutputStream()); InputStream in = new BufferedInputStream(connection - .getInputStream()); + .getInputStream()); // read the first line only; that's all we need StringBuffer request = new StringBuffer(80); while (true) { diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AbstractCasAuthorizedDeciderTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AbstractCasAuthorizedDeciderTests.java index 4ee2957..c7636a0 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AbstractCasAuthorizedDeciderTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AbstractCasAuthorizedDeciderTests.java @@ -5,13 +5,12 @@ */ package org.jasig.cas.client.authorization; -import org.jasig.cas.authentication.principal.SimplePrincipal; - import junit.framework.TestCase; +import org.jasig.cas.authentication.principal.SimplePrincipal; /** * Abstract test for all CasAuthorizedDecider implementations. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -22,17 +21,17 @@ public abstract class AbstractCasAuthorizedDeciderTests extends TestCase { protected abstract CasAuthorizedDecider getCasAuthorizedDeciderImpl(); - protected void setUp() throws Exception { + protected final void setUp() throws Exception { this.casAuthorizedDecider = getCasAuthorizedDeciderImpl(); } - public void testIsAuthorized() { + public final void testIsAuthorized() { assertTrue(this.casAuthorizedDecider - .isAuthorizedToUseApplication(new SimplePrincipal("scott"))); + .isAuthorizedToUseApplication(new SimplePrincipal("scott"))); } - public void testIsNotAuthorized() { + public final void testIsNotAuthorized() { assertFalse(this.casAuthorizedDecider - .isAuthorizedToUseApplication(new SimplePrincipal("not"))); + .isAuthorizedToUseApplication(new SimplePrincipal("not"))); } } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AuthorizationExceptionTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AuthorizationExceptionTests.java index 5430499..dd1ce6d 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AuthorizationExceptionTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/authorization/AuthorizationExceptionTests.java @@ -12,7 +12,7 @@ import junit.framework.TestCase; * @version $Revision$ $Date$ * @since 3.0 */ -public class AuthorizationExceptionTests extends TestCase { +public final class AuthorizationExceptionTests extends TestCase { private static final String CONST_MESSAGE = "t"; @@ -20,7 +20,7 @@ public class AuthorizationExceptionTests extends TestCase { public void testMessageThrowable() { final AuthorizationException e = new AuthorizationException( - CONST_MESSAGE, CONST_THROWABLE); + CONST_MESSAGE, CONST_THROWABLE); assertEquals(CONST_MESSAGE, e.getMessage()); assertEquals(CONST_THROWABLE, e.getCause()); @@ -28,14 +28,14 @@ public class AuthorizationExceptionTests extends TestCase { public void testMessage() { final AuthorizationException e = new AuthorizationException( - CONST_MESSAGE); + CONST_MESSAGE); assertEquals(CONST_MESSAGE, e.getMessage()); } public void testThrowable() { final AuthorizationException e = new AuthorizationException( - CONST_THROWABLE); + CONST_THROWABLE); assertEquals(CONST_THROWABLE, e.getCause()); } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImplTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImplTests.java index 427d7ba..4f7d20c 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImplTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/authorization/DefaultCasAuthorizedDeciderImplTests.java @@ -9,14 +9,13 @@ import java.util.ArrayList; import java.util.List; public final class DefaultCasAuthorizedDeciderImplTests extends - AbstractCasAuthorizedDeciderTests { + AbstractCasAuthorizedDeciderTests { public CasAuthorizedDecider getCasAuthorizedDeciderImpl() { - final DefaultCasAuthorizedDeciderImpl impl = new DefaultCasAuthorizedDeciderImpl(); final List list = new ArrayList(); list.add("scott"); - impl.setUsers(list); - impl.init(); + + final DefaultCasAuthorizedDeciderImpl impl = new DefaultCasAuthorizedDeciderImpl(list); return impl; } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/proxy/AbstractProxyGrantingTicketStorageTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/proxy/AbstractProxyGrantingTicketStorageTests.java index aca2b4b..0a92d4e 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/proxy/AbstractProxyGrantingTicketStorageTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/proxy/AbstractProxyGrantingTicketStorageTests.java @@ -16,18 +16,18 @@ public abstract class AbstractProxyGrantingTicketStorageTests extends TestCase { protected ProxyGrantingTicketStorageImpl proxyGrantingTicketStorageImpl; - public void testNullValue() { + public final void testNullValue() { assertNull(this.proxyGrantingTicketStorageImpl - .retrieve("this should not exist")); + .retrieve("this should not exist")); } - public void testValueExists() { + public final void testValueExists() { final String CONST_KEY = "testKey"; final String CONST_VALUE = "testValue"; this.proxyGrantingTicketStorageImpl.save(CONST_KEY, CONST_VALUE); assertEquals(CONST_VALUE, this.proxyGrantingTicketStorageImpl - .retrieve(CONST_KEY)); + .retrieve(CONST_KEY)); } } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImplTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImplTests.java index 20e686b..dd48462 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImplTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/proxy/ProxyGrantingTicketStorageImplTests.java @@ -7,17 +7,15 @@ package org.jasig.cas.client.proxy; /** * Test cases for the ProxyGrantingTicketStorageImplTests. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ -public class ProxyGrantingTicketStorageImplTests extends - AbstractProxyGrantingTicketStorageTests { +public final class ProxyGrantingTicketStorageImplTests extends + AbstractProxyGrantingTicketStorageTests { protected void setUp() throws Exception { - this.proxyGrantingTicketStorageImpl = new ProxyGrantingTicketStorageImpl(); - this.proxyGrantingTicketStorageImpl.setTimeout(1000); - this.proxyGrantingTicketStorageImpl.init(); + this.proxyGrantingTicketStorageImpl = new ProxyGrantingTicketStorageImpl(1000); } } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServletTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServletTests.java index 1784abb..723f366 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServletTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/proxy/SpringConfiguredProxyReceptorServletTests.java @@ -15,7 +15,7 @@ import org.springframework.web.context.support.XmlWebApplicationContext; import javax.servlet.ServletConfig; -public class SpringConfiguredProxyReceptorServletTests extends TestCase { +public final class SpringConfiguredProxyReceptorServletTests extends TestCase { private XmlWebApplicationContext webApplicationContext; @@ -23,7 +23,7 @@ public class SpringConfiguredProxyReceptorServletTests extends TestCase { AbstractProxyReceptorServlet servlet = new SpringConfiguredProxyReceptorServlet(); try { servlet - .init(getServletConfig("classpath:badProxyGrantingTicketStorageConfig.xml")); + .init(getServletConfig("classpath:badProxyGrantingTicketStorageConfig.xml")); fail("Exception expected."); } catch (final Exception e) { // expected @@ -34,7 +34,7 @@ public class SpringConfiguredProxyReceptorServletTests extends TestCase { AbstractProxyReceptorServlet servlet = new SpringConfiguredProxyReceptorServlet(); try { servlet - .init(getServletConfig("classpath:twoProxyGrantingTicketStorageConfig.xml")); + .init(getServletConfig("classpath:twoProxyGrantingTicketStorageConfig.xml")); fail("Exception expected."); } catch (final Exception e) { // expected @@ -45,7 +45,7 @@ public class SpringConfiguredProxyReceptorServletTests extends TestCase { AbstractProxyReceptorServlet servlet = new SpringConfiguredProxyReceptorServlet(); try { servlet - .init(getServletConfig("classpath:oneProxyGrantingTicketStorageConfig.xml")); + .init(getServletConfig("classpath:oneProxyGrantingTicketStorageConfig.xml")); } catch (final Exception e) { fail("Unexpected excception."); } @@ -54,7 +54,7 @@ public class SpringConfiguredProxyReceptorServletTests extends TestCase { public void testNoPgtOrPgtIouPassed() throws Exception { final AbstractProxyReceptorServlet servlet = new SpringConfiguredProxyReceptorServlet(); servlet - .init(getServletConfig("classpath:proxyGrantingTicketStorageConfig.xml")); + .init(getServletConfig("classpath:proxyGrantingTicketStorageConfig.xml")); final MockHttpServletResponse response = new MockHttpServletResponse(); servlet.doGet(new MockHttpServletRequest(), response); @@ -65,10 +65,10 @@ public class SpringConfiguredProxyReceptorServletTests extends TestCase { public void testPgtPassed() throws Exception { final AbstractProxyReceptorServlet servlet = new SpringConfiguredProxyReceptorServlet(); servlet - .init(getServletConfig("classpath:proxyGrantingTicketStorageConfig.xml")); + .init(getServletConfig("classpath:proxyGrantingTicketStorageConfig.xml")); final ProxyGrantingTicketStorage storage = (ProxyGrantingTicketStorage) this.webApplicationContext - .getBean("proxyGrantingTicketStorage"); + .getBean("proxyGrantingTicketStorage"); final MockHttpServletRequest request = new MockHttpServletRequest(); request.setParameter("pgtIou", "test"); @@ -83,13 +83,13 @@ public class SpringConfiguredProxyReceptorServletTests extends TestCase { private ServletConfig getServletConfig(final String contextLocation) { this.webApplicationContext = new XmlWebApplicationContext(); this.webApplicationContext - .setConfigLocations(new String[] {contextLocation}); + .setConfigLocations(new String[]{contextLocation}); this.webApplicationContext.refresh(); MockServletContext context = new MockServletContext(); context.setAttribute( - WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, - this.webApplicationContext); + WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, + this.webApplicationContext); return new MockServletConfig(context); } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java index ee3d5f2..d4e5198 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/util/CommonUtilsTests.java @@ -5,19 +5,19 @@ */ package org.jasig.cas.client.util; +import junit.framework.TestCase; + import java.util.ArrayList; import java.util.Collection; -import junit.framework.TestCase; - /** * Tests for the CommonUtils. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ -public class CommonUtilsTests extends TestCase { +public final class CommonUtilsTests extends TestCase { public void testAssertNotNull() { final String CONST_MESSAGE = "test"; diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/util/DelegatingFilterTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/util/DelegatingFilterTests.java index a64b1d3..dbb0b08 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/util/DelegatingFilterTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/util/DelegatingFilterTests.java @@ -16,12 +16,12 @@ import java.util.Map; /** * Test Cases for DelegatingFilter - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ -public class DelegatingFilterTests extends TestCase { +public final class DelegatingFilterTests extends TestCase { private DelegatingFilter delegatingFilter; @@ -33,12 +33,7 @@ public class DelegatingFilterTests extends TestCase { delegators.put("1", new TestFilter(1)); this.filterExecuted = -1; - this.delegatingFilter = new DelegatingFilter(); - this.delegatingFilter.setDefaultFilter(new TestFilter(0)); - this.delegatingFilter.setExactMatch(true); - this.delegatingFilter.setDelegators(delegators); - this.delegatingFilter.setRequestParameterName("test"); - this.delegatingFilter.init(); + this.delegatingFilter = new DelegatingFilter("test", delegators, true, new TestFilter(0)); this.delegatingFilter.init(null); } @@ -51,7 +46,7 @@ public class DelegatingFilterTests extends TestCase { request.addParameter("test", "1"); this.delegatingFilter.doFilter(request, new MockHttpServletResponse(), - null); + null); assertEquals(1, this.filterExecuted); } @@ -61,14 +56,14 @@ public class DelegatingFilterTests extends TestCase { request.addParameter("test", "0"); this.delegatingFilter.doFilter(request, new MockHttpServletResponse(), - null); + null); assertEquals(0, this.filterExecuted); } public void testNoParam() throws Exception { this.delegatingFilter.doFilter(new MockHttpServletRequest(), - new MockHttpServletResponse(), null); + new MockHttpServletResponse(), null); assertEquals(0, this.filterExecuted); } @@ -79,27 +74,27 @@ public class DelegatingFilterTests extends TestCase { delegators.put("1.*", new TestFilter(1)); - this.delegatingFilter.setExactMatch(false); - this.delegatingFilter.setDelegators(delegators); + this.delegatingFilter = new DelegatingFilter("test", delegators, false, new TestFilter(0)); + MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("test", "1"); this.delegatingFilter.doFilter(request, new MockHttpServletResponse(), - null); + null); assertEquals(1, this.filterExecuted); request = new MockHttpServletRequest(); request.addParameter("test", "15"); this.delegatingFilter.doFilter(request, new MockHttpServletResponse(), - null); + null); assertEquals(1, this.filterExecuted); request = new MockHttpServletRequest(); request.addParameter("test", "0"); this.delegatingFilter.doFilter(request, new MockHttpServletResponse(), - null); + null); assertEquals(0, this.filterExecuted); } @@ -108,17 +103,15 @@ public class DelegatingFilterTests extends TestCase { Map map = new HashMap(); map.put("test", new Object()); - this.delegatingFilter.setDelegators(map); - try { - this.delegatingFilter.init(); + this.delegatingFilter = new DelegatingFilter("test", map, false, new TestFilter(0)); fail("Exception expected."); } catch (IllegalArgumentException e) { // expected } } - private class TestFilter implements Filter { + private final class TestFilter implements Filter { private final int i; @@ -131,7 +124,7 @@ public class DelegatingFilterTests extends TestCase { } public void doFilter(ServletRequest arg0, ServletResponse arg1, - FilterChain arg2) throws IOException, ServletException { + FilterChain arg2) throws IOException, ServletException { DelegatingFilterTests.this.filterExecuted = this.i; } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/AbstractTicketValidatorTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/AbstractTicketValidatorTests.java index 2b5d242..a37e05e 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/AbstractTicketValidatorTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/AbstractTicketValidatorTests.java @@ -9,7 +9,7 @@ import junit.framework.TestCase; /** * Base class for all TicketValidator tests to inherit from. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/AssertionImplTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/AssertionImplTests.java index 1b33057..8de22c0 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/AssertionImplTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/AssertionImplTests.java @@ -14,7 +14,7 @@ import java.util.Map; /** * Test cases for the {@link AssertionImpl}. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -41,11 +41,11 @@ public final class AssertionImplTests extends TestCase { public void testCompleteConstructor() { final Assertion assertion = new AssertionImpl(CONST_PRINCIPAL, - CONST_ATTRIBUTES, CONST_PROXY_GRANTING_TICKET_IOU); + CONST_ATTRIBUTES, CONST_PROXY_GRANTING_TICKET_IOU); assertEquals(CONST_PRINCIPAL, assertion.getPrincipal()); assertEquals(CONST_ATTRIBUTES, assertion.getAttributes()); assertEquals(CONST_PROXY_GRANTING_TICKET_IOU, assertion - .getProxyGrantingTicketId()); + .getProxyGrantingTicketId()); } } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas10TicketValidatorTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas10TicketValidatorTests.java index 1604b75..4e7b76d 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas10TicketValidatorTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas10TicketValidatorTests.java @@ -14,7 +14,7 @@ import java.io.UnsupportedEncodingException; /** * Test cases for the {@link Cas10TicketValidator}. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -28,19 +28,15 @@ public final class Cas10TicketValidatorTests extends AbstractTicketValidatorTest } protected void setUp() throws Exception { - this.ticketValidator = new Cas10TicketValidator(); - this.ticketValidator.setCasServerUrl(CONST_CAS_SERVER_URL); - this.ticketValidator.setRenew(true); - this.ticketValidator.setHttpClient(new HttpClient()); - this.ticketValidator.init(); + this.ticketValidator = new Cas10TicketValidator(CONST_CAS_SERVER_URL, true, new HttpClient()); } public void testNoResponse() throws Exception { PublicTestHttpServer.instance().content = "no\n\n" - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); try { this.ticketValidator.validate("testTicket", new SimpleService( - "myService")); + "myService")); fail("ValidationException expected."); } catch (final ValidationException e) { // expected @@ -48,20 +44,20 @@ public final class Cas10TicketValidatorTests extends AbstractTicketValidatorTest } public void testYesResponse() throws ValidationException, - UnsupportedEncodingException { + UnsupportedEncodingException { PublicTestHttpServer.instance().content = "yes\nusername\n\n" - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); final Assertion assertion = this.ticketValidator.validate("testTicket", - new SimpleService("myService")); + new SimpleService("myService")); assertEquals(CONST_USERNAME, assertion.getPrincipal().getId()); } public void testBadResponse() throws UnsupportedEncodingException { PublicTestHttpServer.instance().content = "falalala\n\n" - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); try { this.ticketValidator.validate("testTicket", new SimpleService( - "myService")); + "myService")); fail("ValidationException expected."); } catch (final ValidationException e) { // expected diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java index 99e7129..dec5ac5 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ProxyTicketValidatorTests.java @@ -18,13 +18,13 @@ import java.util.List; /** * Test cases for the {@link Cas20ProxyTicketValidator}. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class Cas20ProxyTicketValidatorTests extends - AbstractTicketValidatorTests { + AbstractTicketValidatorTests { private Cas20ProxyTicketValidator ticketValidator; @@ -33,46 +33,36 @@ public final class Cas20ProxyTicketValidatorTests extends } protected void setUp() throws Exception { - ProxyGrantingTicketStorage proxyGrantingTicketStorage = getProxyGrantingTicketStorage(); - this.ticketValidator = new Cas20ProxyTicketValidator(); - this.ticketValidator.setCasServerUrl(CONST_CAS_SERVER_URL); - this.ticketValidator.setRenew(true); - this.ticketValidator - .setProxyGrantingTicketStorage(proxyGrantingTicketStorage); - this.ticketValidator.setHttpClient(new HttpClient()); - + final ProxyGrantingTicketStorage proxyGrantingTicketStorage = getProxyGrantingTicketStorage(); final List list = new ArrayList(); list.add("proxy1 proxy2 proxy3"); - this.ticketValidator.setProxyChains(list); - this.ticketValidator.init(); + this.ticketValidator = new Cas20ProxyTicketValidator(CONST_CAS_SERVER_URL, true, new HttpClient(), proxyGrantingTicketStorage, list, false); } - private ProxyGrantingTicketStorage getProxyGrantingTicketStorage() - throws Exception { + private ProxyGrantingTicketStorage getProxyGrantingTicketStorage() { ProxyGrantingTicketStorageImpl proxyGrantingTicketStorageImpl = new ProxyGrantingTicketStorageImpl(); - proxyGrantingTicketStorageImpl.init(); return proxyGrantingTicketStorageImpl; } public void testProxyChainWithValidProxy() throws ValidationException, - UnsupportedEncodingException { + UnsupportedEncodingException { final String USERNAME = "username"; final String RESPONSE = "usernamePGTIOU-84678-8a9d...proxy1proxy2proxy3"; PublicTestHttpServer.instance().content = RESPONSE - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); final Assertion assertion = this.ticketValidator.validate("test", - new SimpleService("test")); + new SimpleService("test")); assertEquals(USERNAME, assertion.getPrincipal().getId()); } public void testProxyChainWithInvalidProxy() throws ValidationException, - UnsupportedEncodingException { + UnsupportedEncodingException { final String RESPONSE = "usernamePGTIOU-84678-8a9d...proxy7proxy2proxy3"; PublicTestHttpServer.instance().content = RESPONSE - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); try { this.ticketValidator.validate("test", new SimpleService("test")); diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidatorTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidatorTests.java index c8eb98b..05b18f5 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidatorTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/validation/Cas20ServiceTicketValidatorTests.java @@ -16,13 +16,13 @@ import java.io.UnsupportedEncodingException; /** * Test cases for the {@link Cas20ServiceTicketValidator}. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class Cas20ServiceTicketValidatorTests extends - AbstractTicketValidatorTests { + AbstractTicketValidatorTests { private Cas20ServiceTicketValidator ticketValidator; @@ -34,19 +34,11 @@ public final class Cas20ServiceTicketValidatorTests extends protected void setUp() throws Exception { this.proxyGrantingTicketStorage = getProxyGrantingTicketStorage(); - this.ticketValidator = new Cas20ServiceTicketValidator(); - this.ticketValidator.setCasServerUrl(CONST_CAS_SERVER_URL); - this.ticketValidator.setRenew(true); - this.ticketValidator - .setProxyGrantingTicketStorage(this.proxyGrantingTicketStorage); - this.ticketValidator.setHttpClient(new HttpClient()); - this.ticketValidator.init(); + this.ticketValidator = new Cas20ServiceTicketValidator(CONST_CAS_SERVER_URL, true, new HttpClient(), this.proxyGrantingTicketStorage); } - private ProxyGrantingTicketStorage getProxyGrantingTicketStorage() - throws Exception { + private ProxyGrantingTicketStorage getProxyGrantingTicketStorage() { ProxyGrantingTicketStorageImpl proxyGrantingTicketStorageImpl = new ProxyGrantingTicketStorageImpl(); - proxyGrantingTicketStorageImpl.init(); return proxyGrantingTicketStorageImpl; } @@ -54,7 +46,7 @@ public final class Cas20ServiceTicketValidatorTests extends public void testNoResponse() throws UnsupportedEncodingException { final String RESPONSE = "Ticket ST-1856339-aA5Yuvrxzpv8Tau1cYQ7 not recognized"; PublicTestHttpServer.instance().content = RESPONSE - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); try { this.ticketValidator.validate("test", new SimpleService("test")); fail("ValidationException expected due to 'no' response"); @@ -64,37 +56,37 @@ public final class Cas20ServiceTicketValidatorTests extends } public void testYesResponseButNoPgt() throws ValidationException, - UnsupportedEncodingException { + UnsupportedEncodingException { final String USERNAME = "username"; final String RESPONSE = "" - + USERNAME - + ""; + + USERNAME + + ""; PublicTestHttpServer.instance().content = RESPONSE - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); final Assertion assertion = this.ticketValidator.validate("test", - new SimpleService("test")); + new SimpleService("test")); assertEquals(USERNAME, assertion.getPrincipal().getId()); } public void testYesResponseWithPgt() throws ValidationException, - UnsupportedEncodingException { + UnsupportedEncodingException { final String USERNAME = "username"; final String PGTIOU = "testPgtIou"; final String PGT = "test"; final String RESPONSE = "" - + USERNAME - + "" - + PGTIOU - + ""; + + USERNAME + + "" + + PGTIOU + + ""; PublicTestHttpServer.instance().content = RESPONSE - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); this.proxyGrantingTicketStorage.save(PGTIOU, PGT); final Assertion assertion = this.ticketValidator.validate("test", - new SimpleService("test")); + new SimpleService("test")); assertEquals(USERNAME, assertion.getPrincipal().getId()); assertEquals(PGT, assertion.getProxyGrantingTicketId()); } @@ -102,7 +94,7 @@ public final class Cas20ServiceTicketValidatorTests extends public void testInvalidResponse() throws Exception { final String RESPONSE = ""; PublicTestHttpServer.instance().content = RESPONSE - .getBytes(PublicTestHttpServer.instance().encoding); + .getBytes(PublicTestHttpServer.instance().encoding); try { this.ticketValidator.validate("test", new SimpleService("test")); fail("ValidationException expected due to invalid response."); diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthenticationFilterTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthenticationFilterTests.java index a4dba6f..cef80e4 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthenticationFilterTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthenticationFilterTests.java @@ -22,7 +22,7 @@ import java.net.URLEncoder; /** * Tests for the CasAuthenticationFilter. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -36,13 +36,8 @@ public final class CasAuthenticationFilterTests extends TestCase { private CasAuthenticationFilter filter; protected void setUp() throws Exception { - this.filter = new CasAuthenticationFilter(); - this.filter.setCasServerLoginUrl(CAS_LOGIN_URL); - this.filter.setGateway(false); - this.filter.setRenew(false); - this.filter.setServiceUrl(CAS_SERVICE_URL); + this.filter = new CasAuthenticationFilter(null, CAS_SERVICE_URL, CAS_LOGIN_URL, false, false); this.filter.init(new MockFilterConfig()); - this.filter.init(); } protected void tearDown() throws Exception { @@ -53,10 +48,10 @@ public final class CasAuthenticationFilterTests extends TestCase { final MockHttpSession session = new MockHttpSession(); final MockHttpServletRequest request = new MockHttpServletRequest(); final MockHttpServletResponse response = new MockHttpServletResponse(); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(ServletRequest arg0, ServletResponse arg1) - throws IOException, ServletException { + throws IOException, ServletException { // nothing to do } }; @@ -65,8 +60,8 @@ public final class CasAuthenticationFilterTests extends TestCase { this.filter.doFilter(request, response, filterChain); assertEquals(CAS_LOGIN_URL + "?service=" - + URLEncoder.encode(CAS_SERVICE_URL, "UTF-8"), response - .getRedirectedUrl()); + + URLEncoder.encode(CAS_SERVICE_URL, "UTF-8"), response + .getRedirectedUrl()); } public void testRedirectWithQueryString() throws Exception { @@ -76,22 +71,21 @@ public final class CasAuthenticationFilterTests extends TestCase { request.setQueryString("test=12456"); request.setRequestURI("/test"); request.setSecure(true); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(ServletRequest arg0, ServletResponse arg1) - throws IOException, ServletException { + throws IOException, ServletException { // nothing to do } }; request.setSession(session); - this.filter.setServiceUrl(null); - this.filter.setServerName("localhost:8443"); + this.filter = new CasAuthenticationFilter("localhost:8443", null, CAS_LOGIN_URL, false, false); this.filter.doFilter(request, response, filterChain); assertEquals(CAS_LOGIN_URL - + "?service=" - + URLEncoder.encode("https://localhost:8443" + + "?service=" + + URLEncoder.encode("https://localhost:8443" + request.getRequestURI() + "?" + request.getQueryString(), "UTF-8"), response.getRedirectedUrl()); } @@ -100,17 +94,17 @@ public final class CasAuthenticationFilterTests extends TestCase { final MockHttpSession session = new MockHttpSession(); final MockHttpServletRequest request = new MockHttpServletRequest(); final MockHttpServletResponse response = new MockHttpServletResponse(); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(ServletRequest arg0, ServletResponse arg1) - throws IOException, ServletException { + throws IOException, ServletException { // nothing to do } }; request.setSession(session); session.setAttribute(AbstractCasFilter.CONST_ASSERTION, - new AssertionImpl(new SimplePrincipal("test"))); + new AssertionImpl(new SimplePrincipal("test"))); this.filter.doFilter(request, response, filterChain); assertNull(response.getRedirectedUrl()); @@ -120,15 +114,15 @@ public final class CasAuthenticationFilterTests extends TestCase { final MockHttpSession session = new MockHttpSession(); final MockHttpServletRequest request = new MockHttpServletRequest(); final MockHttpServletResponse response = new MockHttpServletResponse(); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(ServletRequest arg0, ServletResponse arg1) - throws IOException, ServletException { + throws IOException, ServletException { // nothing to do } }; - this.filter.setRenew(true); + this.filter = new CasAuthenticationFilter("localhost:8443", null, CAS_LOGIN_URL, true, false); request.setSession(session); this.filter.doFilter(request, response, filterChain); @@ -140,16 +134,16 @@ public final class CasAuthenticationFilterTests extends TestCase { final MockHttpSession session = new MockHttpSession(); final MockHttpServletRequest request = new MockHttpServletRequest(); final MockHttpServletResponse response = new MockHttpServletResponse(); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(ServletRequest arg0, ServletResponse arg1) - throws IOException, ServletException { + throws IOException, ServletException { // nothing to do } }; request.setSession(session); - this.filter.setGateway(true); + this.filter = new CasAuthenticationFilter("localhost:8443", null, CAS_LOGIN_URL, true, true); this.filter.doFilter(request, response, filterChain); assertNotNull(session.getAttribute(AbstractCasFilter.CONST_GATEWAY)); assertNotNull(response.getRedirectedUrl()); diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthorizationFilterTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthorizationFilterTests.java index fe0ed5e..29c95be 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthorizationFilterTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasAuthorizationFilterTests.java @@ -24,7 +24,7 @@ import java.io.IOException; /** * Tests for the CasAuthorizationFilter. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -34,14 +34,13 @@ public final class CasAuthorizationFilterTests extends TestCase { private CasAuthorizationFilter casAuthorizationFilter; protected void setUp() throws Exception { - this.casAuthorizationFilter = new CasAuthorizationFilter(); - this.casAuthorizationFilter.setDecider(new CasAuthorizedDecider(){ + this.casAuthorizationFilter = new CasAuthorizationFilter(new CasAuthorizedDecider() { public boolean isAuthorizedToUseApplication(Principal principal) { return principal.getId().equals("scott"); } }); - this.casAuthorizationFilter.init(); + this.casAuthorizationFilter.init(new MockFilterConfig()); } @@ -56,18 +55,18 @@ public final class CasAuthorizationFilterTests extends TestCase { request.setSession(session); session.setAttribute(AbstractCasFilter.CONST_ASSERTION, - new AssertionImpl(new SimplePrincipal("scott"))); + new AssertionImpl(new SimplePrincipal("scott"))); try { this.casAuthorizationFilter.doFilter(request, response, - new FilterChain(){ + new FilterChain() { - public void doFilter(ServletRequest arg0, - ServletResponse arg1) throws IOException, - ServletException { - // nothing to do - } - }); + public void doFilter(ServletRequest arg0, + ServletResponse arg1) throws IOException, + ServletException { + // nothing to do + } + }); } catch (Exception e) { fail("No exception expected"); } @@ -80,7 +79,7 @@ public final class CasAuthorizationFilterTests extends TestCase { request.setSession(session); session.setAttribute(AbstractCasFilter.CONST_ASSERTION, - new AssertionImpl(new SimplePrincipal("test"))); + new AssertionImpl(new SimplePrincipal("test"))); try { this.casAuthorizationFilter.doFilter(request, response, null); diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasValidationFilterTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasValidationFilterTests.java index eeb7090..a247cd8 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasValidationFilterTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/CasValidationFilterTests.java @@ -24,7 +24,7 @@ import java.io.IOException; /** * Tests for the CasValidationFilter. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -34,19 +34,16 @@ public final class CasValidationFilterTests extends TestCase { private CasValidationFilter filter; protected void setUp() throws Exception { - this.filter = new CasValidationFilter(); - this.filter.setServerName("https://localhost"); - this.filter.setTicketValidator(new TicketValidator(){ + this.filter = new CasValidationFilter("localhost:8443", null, new TicketValidator() { public Assertion validate(final String ticketId, - final Service service) throws ValidationException { + final Service service) throws ValidationException { if (ticketId.equals("true")) { return new AssertionImpl(new SimplePrincipal("test")); } throw new ValidationException("error validating ticket."); } }); - this.filter.init(); } protected void tearDown() throws Exception { @@ -58,11 +55,11 @@ public final class CasValidationFilterTests extends TestCase { final MockHttpServletResponse response = new MockHttpServletResponse(); final MockHttpSession session = new MockHttpSession(); request.setSession(session); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(final ServletRequest arg0, - final ServletResponse arg1) throws IOException, - ServletException { + final ServletResponse arg1) throws IOException, + ServletException { // nothing to do } }; @@ -78,11 +75,11 @@ public final class CasValidationFilterTests extends TestCase { final MockHttpSession session = new MockHttpSession(); request.setSession(session); request.setParameter(AbstractCasFilter.PARAM_TICKET, "true"); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(final ServletRequest arg0, - final ServletResponse arg1) throws IOException, - ServletException { + final ServletResponse arg1) throws IOException, + ServletException { // nothing to do } }; @@ -98,11 +95,11 @@ public final class CasValidationFilterTests extends TestCase { final MockHttpSession session = new MockHttpSession(); request.setSession(session); request.setParameter(AbstractCasFilter.PARAM_TICKET, "false"); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(final ServletRequest arg0, - final ServletResponse arg1) throws IOException, - ServletException { + final ServletResponse arg1) throws IOException, + ServletException { // nothing to do } }; @@ -112,7 +109,7 @@ public final class CasValidationFilterTests extends TestCase { fail("Exception expected."); } catch (final ServletException e) { assertTrue(e.getRootCause().getClass().isAssignableFrom( - ValidationException.class)); + ValidationException.class)); // expected } } diff --git a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilterTests.java b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilterTests.java index f267378..d8e99c0 100644 --- a/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilterTests.java +++ b/cas-client-core/src/test/java/org/jasig/cas/client/web/filter/HttpServletRequestWrapperFilterTests.java @@ -21,7 +21,7 @@ import java.io.IOException; /** * Tests for the HttpServletRequestWrapperFilter. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -41,115 +41,115 @@ public final class HttpServletRequestWrapperFilterTests extends TestCase { public void testWrappedRequest() throws Exception { final MockHttpServletRequest request = new MockHttpServletRequest(); final MockHttpSession session = new MockHttpSession(); - final FilterChain filterChain = new FilterChain(){ + final FilterChain filterChain = new FilterChain() { public void doFilter(ServletRequest request, - ServletResponse response) throws IOException, ServletException { + ServletResponse response) throws IOException, ServletException { HttpServletRequestWrapperFilterTests.this.mockRequest = (HttpServletRequest) request; } }; session.setAttribute(AbstractCasFilter.CONST_ASSERTION, - new AssertionImpl(new SimplePrincipal("test"))); + new AssertionImpl(new SimplePrincipal("test"))); request.setSession(session); this.filter.doFilter(request, new MockHttpServletResponse(), - filterChain); + filterChain); assertEquals("test", this.mockRequest.getRemoteUser()); assertEquals(request.getAttributeNames(), this.mockRequest - .getAttributeNames()); + .getAttributeNames()); assertEquals(request.getAuthType(), this.mockRequest.getAuthType()); this.mockRequest.setCharacterEncoding("test"); assertEquals(request.getCharacterEncoding(), this.mockRequest - .getCharacterEncoding()); + .getCharacterEncoding()); assertNotSame(request.getClass(), this.mockRequest.getClass()); assertEquals(request.getContentLength(), this.mockRequest - .getContentLength()); + .getContentLength()); assertEquals(request.getContentType(), this.mockRequest - .getContentType()); + .getContentType()); assertEquals(request.getContextPath(), this.mockRequest - .getContextPath()); + .getContextPath()); assertEquals(request.getCookies(), this.mockRequest.getCookies()); assertEquals(request.getHeaderNames(), this.mockRequest - .getHeaderNames()); + .getHeaderNames()); assertEquals(request.getInputStream(), this.mockRequest - .getInputStream()); + .getInputStream()); assertEquals(request.getLocalAddr(), this.mockRequest.getLocalAddr()); assertEquals(request.getLocale(), this.mockRequest.getLocale()); assertEquals(request.getLocales().hasMoreElements(), this.mockRequest - .getLocales().hasMoreElements()); + .getLocales().hasMoreElements()); assertEquals(request.getLocalName(), this.mockRequest.getLocalName()); assertEquals(request.getLocalPort(), this.mockRequest.getLocalPort()); assertEquals(request.getMethod(), this.mockRequest.getMethod()); assertEquals(request.getParameterMap(), this.mockRequest - .getParameterMap()); + .getParameterMap()); assertEquals(request.getParameterNames().hasMoreElements(), - this.mockRequest.getParameterNames().hasMoreElements()); + this.mockRequest.getParameterNames().hasMoreElements()); assertEquals(request.getPathInfo(), this.mockRequest.getPathInfo()); assertEquals(request.getPathTranslated(), this.mockRequest - .getPathTranslated()); + .getPathTranslated()); assertEquals(request.getProtocol(), this.mockRequest.getProtocol()); assertEquals(request.getQueryString(), this.mockRequest - .getQueryString()); + .getQueryString()); assertEquals(request.getReader(), this.mockRequest.getReader()); assertEquals(request.getRemoteAddr(), this.mockRequest.getRemoteAddr()); assertEquals(request.getRemoteHost(), this.mockRequest.getRemoteHost()); assertEquals(request.getRemotePort(), this.mockRequest.getRemotePort()); assertEquals(request.getRequestedSessionId(), this.mockRequest - .getRequestedSessionId()); + .getRequestedSessionId()); assertEquals(request.getRequestURI(), this.mockRequest.getRequestURI()); assertEquals(request.getRequestURL().toString(), this.mockRequest - .getRequestURL().toString()); + .getRequestURL().toString()); assertEquals(request.getScheme(), this.mockRequest.getScheme()); assertEquals(request.getServerName(), this.mockRequest.getServerName()); assertEquals(request.getServerPort(), this.mockRequest.getServerPort()); assertEquals(request.getServletPath(), this.mockRequest - .getServletPath()); + .getServletPath()); assertEquals(request.getSession(), this.mockRequest.getSession()); assertEquals(request.getSession(false), this.mockRequest - .getSession(false)); + .getSession(false)); assertEquals(request.getUserPrincipal(), this.mockRequest - .getUserPrincipal()); + .getUserPrincipal()); assertEquals(request.isRequestedSessionIdFromCookie(), this.mockRequest - .isRequestedSessionIdFromCookie()); + .isRequestedSessionIdFromCookie()); assertEquals(request.isRequestedSessionIdFromUrl(), this.mockRequest - .isRequestedSessionIdFromUrl()); + .isRequestedSessionIdFromUrl()); assertEquals(request.isRequestedSessionIdFromURL(), this.mockRequest - .isRequestedSessionIdFromURL()); + .isRequestedSessionIdFromURL()); assertEquals(request.isRequestedSessionIdValid(), this.mockRequest - .isRequestedSessionIdValid()); + .isRequestedSessionIdValid()); assertEquals(request.isSecure(), this.mockRequest.isSecure()); assertEquals(request.isUserInRole("test"), this.mockRequest - .isUserInRole("test")); + .isUserInRole("test")); assertEquals(request.getDateHeader("test"), this.mockRequest - .getDateHeader("test")); + .getDateHeader("test")); assertEquals(request.getHeader("test"), this.mockRequest - .getHeader("test")); + .getHeader("test")); assertEquals(request.getHeaders("test").hasMoreElements(), - this.mockRequest.getHeaders("test").hasMoreElements()); + this.mockRequest.getHeaders("test").hasMoreElements()); assertEquals(request.getIntHeader("test"), this.mockRequest - .getIntHeader("test")); + .getIntHeader("test")); this.mockRequest.setAttribute("test", "test"); assertEquals(request.getAttribute("test"), this.mockRequest - .getAttribute("test")); + .getAttribute("test")); this.mockRequest.removeAttribute("test"); assertEquals(request.getAttribute("test"), this.mockRequest - .getAttribute("test")); + .getAttribute("test")); assertEquals(request.getParameter("test"), this.mockRequest - .getParameter("test")); + .getParameter("test")); assertEquals(request.getParameterValues("test"), this.mockRequest - .getParameterValues("test")); + .getParameterValues("test")); assertEquals(request.getRealPath("test"), this.mockRequest - .getRealPath("test")); + .getRealPath("test")); assertEquals(request.getRequestDispatcher("test").getClass(), - this.mockRequest.getRequestDispatcher("test").getClass()); + this.mockRequest.getRequestDispatcher("test").getClass()); } } diff --git a/cas-client-core/src/test/resources/oneProxyGrantingTicketStorageConfig.xml b/cas-client-core/src/test/resources/oneProxyGrantingTicketStorageConfig.xml index c6bcf86..0861e95 100644 --- a/cas-client-core/src/test/resources/oneProxyGrantingTicketStorageConfig.xml +++ b/cas-client-core/src/test/resources/oneProxyGrantingTicketStorageConfig.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/cas-client-core/src/test/resources/proxyGrantingTicketStorageConfig.xml b/cas-client-core/src/test/resources/proxyGrantingTicketStorageConfig.xml index 8ed6a2c..ea4f3bb 100644 --- a/cas-client-core/src/test/resources/proxyGrantingTicketStorageConfig.xml +++ b/cas-client-core/src/test/resources/proxyGrantingTicketStorageConfig.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/cas-client-core/src/test/resources/twoProxyGrantingTicketStorageConfig.xml b/cas-client-core/src/test/resources/twoProxyGrantingTicketStorageConfig.xml index af49ab8..e490dfa 100644 --- a/cas-client-core/src/test/resources/twoProxyGrantingTicketStorageConfig.xml +++ b/cas-client-core/src/test/resources/twoProxyGrantingTicketStorageConfig.xml @@ -1,11 +1,11 @@ - - - - - + + + + + \ No newline at end of file diff --git a/cas-client-uportal/cas-client-uportal.iml b/cas-client-uportal/cas-client-uportal.iml index 375f369..7e91ecc 100644 --- a/cas-client-uportal/cas-client-uportal.iml +++ b/cas-client-uportal/cas-client-uportal.iml @@ -161,5 +161,9 @@ + + diff --git a/cas-client-uportal/pom.xml b/cas-client-uportal/pom.xml index c82657c..a395853 100644 --- a/cas-client-uportal/pom.xml +++ b/cas-client-uportal/pom.xml @@ -75,7 +75,7 @@ 3.0-rc1 - + false @@ -102,8 +102,8 @@ maven-jxr-plugin - org.apache.maven.plugins - maven-surefire-report-plugin + org.apache.maven.plugins + maven-surefire-report-plugin org.codehaus.mojo diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/AbstractCasSecurityContextFactory.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/AbstractCasSecurityContextFactory.java index 7b7e645..ca0ca4f 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/AbstractCasSecurityContextFactory.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/AbstractCasSecurityContextFactory.java @@ -14,47 +14,58 @@ import org.jasig.portal.security.InitialSecurityContextFactory; import org.jasig.portal.spring.PortalApplicationContextFacade; /** - * Abstract implementation of a SecurityContextFactory that can load all the dependences if a + * Abstract implementation of a SecurityContextFactory that can load all the dependences if a * CasSecurityCcontext. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 - * */ public abstract class AbstractCasSecurityContextFactory extends - InitialSecurityContextFactory { + InitialSecurityContextFactory { - /** Spring Bean ID for the Ticket Validator. */ + /** + * Spring Bean ID for the Ticket Validator. + */ public static final String CONST_CAS_TICKET_VALIDATOR = "casTicketValidator"; - /** Spring Bean ID for the Proxy Retriever. */ + /** + * Spring Bean ID for the Proxy Retriever. + */ public static final String CONST_CAS_PROXY_RETRIEVER = "casProxyRetriever"; - /** Spring Bean ID for the Service. */ + /** + * Spring Bean ID for the Service. + */ public static final String CONST_CAS_SERVICE = "casService"; - /** Spring Bean ID for the ProxyGrantingTicketStorage. */ + /** + * Spring Bean ID for the ProxyGrantingTicketStorage. + */ public static final String CONST_CAS_PROXY_GRANTING_TICKET_STORAGE = "casProxyGrantingTicketStorage"; - /** Instance of Commons Logging. */ + /** + * Instance of Commons Logging. + */ protected final Log log = LogFactory.getLog(this.getClass()); /** * The Ticket Validator referenced by the constant * CONST_CAS_TICKET_VALIDATOR. */ - protected TicketValidator ticketValidator; + protected final TicketValidator ticketValidator; /** * The ProxyRetriever referenced by the constant * CONST_CAS_PROXY_RETRIEVER. */ - protected ProxyRetriever proxyRetriever; + protected final ProxyRetriever proxyRetriever; - /** The Service referenced by the constant CONST_CAS_SERVICE. */ - protected Service service; + /** + * The Service referenced by the constant CONST_CAS_SERVICE. + */ + protected final Service service; /** * Default constructor retrieves and caches results from looking up entries @@ -63,18 +74,19 @@ public abstract class AbstractCasSecurityContextFactory extends */ public AbstractCasSecurityContextFactory() { this.ticketValidator = (TicketValidator) PortalApplicationContextFacade - .getPortalApplicationContext().getBean(CONST_CAS_TICKET_VALIDATOR); + .getPortalApplicationContext().getBean(CONST_CAS_TICKET_VALIDATOR); if (PortalApplicationContextFacade.getPortalApplicationContext() - .containsBean(CONST_CAS_PROXY_RETRIEVER)) { + .containsBean(CONST_CAS_PROXY_RETRIEVER)) { this.proxyRetriever = (ProxyRetriever) PortalApplicationContextFacade - .getPortalApplicationContext().getBean( + .getPortalApplicationContext().getBean( CONST_CAS_PROXY_RETRIEVER); } else { + this.proxyRetriever = null; log - .warn("No Proxy Retriever found in PortalApplicationFacade. No Proxying capabilities will be provided by CAS."); + .warn("No Proxy Retriever found in PortalApplicationFacade. No Proxying capabilities will be provided by CAS."); } this.service = (Service) PortalApplicationContextFacade - .getPortalApplicationContext().getBean(CONST_CAS_SERVICE); + .getPortalApplicationContext().getBean(CONST_CAS_SERVICE); } - + } diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasConnectionContext.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasConnectionContext.java index 1dff5f7..7cbac4e 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasConnectionContext.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasConnectionContext.java @@ -16,21 +16,23 @@ import java.util.Enumeration; /** * Extension to LocalConnectionContext that will retrieve and append a proxy * ticket to a given descriptor. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class CasConnectionContext extends LocalConnectionContext { - /** Instance of ICasSecurityContext. */ + /** + * Instance of ICasSecurityContext. + */ private ICasSecurityContext casSecurityContext; public String getDescriptor(String descriptor, - final ChannelRuntimeData channelRuntimeData) { + final ChannelRuntimeData channelRuntimeData) { if (log.isTraceEnabled()) { log.trace("getDescriptor(" + descriptor + ", " + channelRuntimeData - + ")"); + + ")"); } descriptor = descriptor == null ? "null" : descriptor; @@ -39,11 +41,11 @@ public final class CasConnectionContext extends LocalConnectionContext { if (this.casSecurityContext != null) { final String proxyTicket = this.casSecurityContext - .getProxyTicket(new SimpleService(descriptor)); + .getProxyTicket(new SimpleService(descriptor)); if (proxyTicket != null) { // append ticket parameter and value to query string - if (descriptor.indexOf("?") != -1) { + if (descriptor.indexOf('?') != -1) { descriptor = descriptor + "&ticket=" + proxyTicket; } else { descriptor = descriptor + "?ticket=" + proxyTicket; @@ -57,11 +59,11 @@ public final class CasConnectionContext extends LocalConnectionContext { public void init(final ChannelStaticData channelStaticData) { final ISecurityContext securityContext = channelStaticData.getPerson() - .getSecurityContext(); + .getSecurityContext(); if (ICasSecurityContext.class.isAssignableFrom(securityContext - .getClass()) - && securityContext.isAuthenticated()) { + .getClass()) + && securityContext.isAuthenticated()) { this.casSecurityContext = (ICasSecurityContext) securityContext; } @@ -69,10 +71,10 @@ public final class CasConnectionContext extends LocalConnectionContext { while (enumeration.hasMoreElements()) { final ISecurityContext context = (ISecurityContext) enumeration - .nextElement(); + .nextElement(); if (ISecurityContext.class.isAssignableFrom(context.getClass()) - && context.isAuthenticated()) { + && context.isAuthenticated()) { this.casSecurityContext = (ICasSecurityContext) context; } } diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContext.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContext.java index 68728d3..e627b9d 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContext.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContext.java @@ -17,32 +17,45 @@ import org.jasig.portal.security.provider.ChainingSecurityContext; /** * Implementation of ICasSecurityContext that knows how to handle CAS ticket * validation, as well as the retrieval of Proxy Tickets. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public class CasSecurityContext extends ChainingSecurityContext implements - ICasSecurityContext { + ICasSecurityContext { - /** Unique Id for Serialization */ + /** + * Unique Id for Serialization + */ private static final long serialVersionUID = 1L; - /** Instance of TicketValidator to validate tickets. */ + /** + * Instance of TicketValidator to validate tickets. + */ private final TicketValidator ticketValidator; - /** Instance of ProxyRetriever to obtain proxy tickets. */ + /** + * Instance of ProxyRetriever to obtain proxy tickets. + */ private final ProxyRetriever proxyRetriever; - /** Instance of Service representing uPortal instance. */ + /** + * Instance of Service representing uPortal instance. + */ private final Service service; - /** Assertion about the person this security context is for. */ + /** + * Assertion about the person this security context is for. + */ private Assertion assertion; /** * Instantiate a new CasSecurityContext, setting the required fields. * + * @param ticketValidator the TicketValidator to validate tickets. + * @param service the Service representing the portal. + * @param proxyRetriever the ProxyRetriever to use to retrieve proxies. */ public CasSecurityContext(final TicketValidator ticketValidator, final Service service, final ProxyRetriever proxyRetriever ) { @@ -55,14 +68,14 @@ public class CasSecurityContext extends ChainingSecurityContext implements this.proxyRetriever = proxyRetriever; } - public final String getProxyTicket(final Service service) { + public final String getProxyTicket(final Service targetService) { if (this.proxyRetriever == null - || CommonUtils.isEmpty(this.assertion.getProxyGrantingTicketId())) { + || CommonUtils.isEmpty(this.assertion.getProxyGrantingTicketId())) { return null; } return this.proxyRetriever.getProxyTicketIdFor(this.assertion - .getProxyGrantingTicketId(), service); + .getProxyGrantingTicketId(), targetService); } public final int getAuthType() { @@ -72,17 +85,17 @@ public class CasSecurityContext extends ChainingSecurityContext implements public final synchronized void authenticate() throws PortalSecurityException { this.isauth = false; final String serviceTicket = new String( - this.myOpaqueCredentials.credentialstring); + this.myOpaqueCredentials.credentialstring); final Service service = getService(); if (log.isDebugEnabled()) { log.debug("Attempting to validate ticket [" + serviceTicket - + "] for service [" + service.toString()); + + "] for service [" + service.toString()); } try { this.assertion = this.ticketValidator.validate(serviceTicket, - service); + service); this.myAdditionalDescriptor = null; this.myPrincipal.setUID(this.assertion.getPrincipal().getId()); this.isauth = true; @@ -92,7 +105,7 @@ public class CasSecurityContext extends ChainingSecurityContext implements throw new PortalSecurityException(e.getMessage(), e); } } - + protected Service getService() { return this.service; } diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactory.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactory.java index 29a4510..d47b8ca 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactory.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactory.java @@ -12,7 +12,7 @@ import org.jasig.portal.security.ISecurityContextFactory; * Implementation of an {@link ISecurityContextFactory} that on creation will * retrieve references to Spring managed CAS client objects and pass them to all * new CasSecurityContexts that are created. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 @@ -21,10 +21,12 @@ public final class CasSecurityContextFactory extends AbstractCasSecurityContextF /** * Instantiate a new instance of CasSecurityContext. + * + * @return a new ISecurityContext instance, specifically an instance of CasSecurityContext. */ public ISecurityContext getSecurityContext() { log - .trace("Returning CasSecurityContext from CasSecurityContextFactory."); + .trace("Returning CasSecurityContext from CasSecurityContextFactory."); return new CasSecurityContext(this.ticketValidator, this.service, this.proxyRetriever ); } diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ICasSecurityContext.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ICasSecurityContext.java index ba7dae9..566b178 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ICasSecurityContext.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ICasSecurityContext.java @@ -11,18 +11,21 @@ import org.jasig.cas.authentication.principal.Service; * Interface implemented by CAS security contexts. These implementations are * aware of proxying, and can retrieve a ticket from CAS for accessing a * specific service. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public interface ICasSecurityContext { - /** Authentication type for CAS authentication */ + /** + * Authentication type for CAS authentication + */ public static final int CAS_AUTHTYPE = 0x1701; - /** Retrieve a Proxy Ticket Id for a particular service we wish to proxy against. - * + /** + * Retrieve a Proxy Ticket Id for a particular service we wish to proxy against. + * * @param service the service to retrieve a proxy ticket for. * @return the ticket id, or null if no ticket could be retrieved. */ diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContext.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContext.java index 437de4a..140bdc6 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContext.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContext.java @@ -14,27 +14,29 @@ import org.jasig.cas.client.validation.TicketValidator; * ServiceHolder ThreadLocal object. This allows for a more flexible service to * be provided for ticket validation. This is needed as the normal * ISecurityContext has no mechanism for service urls based on requests. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class ThreadLocalAwareCasSecurityContext extends - CasSecurityContext { + CasSecurityContext { - /** Unique Id for Serialization. */ + /** + * Unique Id for Serialization. + */ private static final long serialVersionUID = 1L; /** * Instantiate a new CasSecurityContext, setting the required fields. - * + * * @param ticketValidator the Ticket Validator. - * @param service the Service instance representing this uPortal instance. - * @param proxyRetriever the object used to retrieve proxies. + * @param service the Service instance representing this uPortal instance. + * @param proxyRetriever the object used to retrieve proxies. */ public ThreadLocalAwareCasSecurityContext( - final TicketValidator ticketValidator, final Service service, - final ProxyRetriever proxyRetriever) { + final TicketValidator ticketValidator, final Service service, + final ProxyRetriever proxyRetriever) { super(ticketValidator, service, proxyRetriever); } diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactory.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactory.java index 24aae2b..56b2314 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactory.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactory.java @@ -9,16 +9,16 @@ import org.jasig.portal.security.ISecurityContext; /** * Factory to instantiate ThreadLocalAwareCasSecurityContexts. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class ThreadLocalAwareCasSecurityContextFactory extends - AbstractCasSecurityContextFactory { + AbstractCasSecurityContextFactory { public ISecurityContext getSecurityContext() { return new ThreadLocalAwareCasSecurityContext(this.ticketValidator, - this.service, this.proxyRetriever); + this.service, this.proxyRetriever); } } diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilter.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilter.java index f20a934..875a1e7 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilter.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilter.java @@ -22,22 +22,31 @@ import java.io.IOException; * {@link ThreadLocalAwareCasSecurityContext} in order to use it for Ticket * validation. *

This filter places the Service in a {@link ServiceHolder}. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class ThreadLocalAwareCasServiceFilter extends AbstractCasFilter { + + public ThreadLocalAwareCasServiceFilter(final String serverName, final String serviceUrl) { + super(serverName, serviceUrl); + } + + public ThreadLocalAwareCasServiceFilter(final String serverName, final String serviceUrl, final boolean useSession) { + super(serverName, serviceUrl, useSession); + } + protected void doFilterInternal(final HttpServletRequest request, - final HttpServletResponse response, final FilterChain filterChain) - throws IOException, ServletException { + final HttpServletResponse response, final FilterChain filterChain) + throws IOException, ServletException { final boolean hasTicket = CommonUtils.isNotBlank(request - .getParameter("ticket")); + .getParameter(AbstractCasFilter.PARAM_TICKET)); try { if (hasTicket) { final Service service = new SimpleService(constructServiceUrl( - request, response)); + request, response)); ServiceHolder.setService(service); } diff --git a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServlet.java b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServlet.java index 3281922..ad1deb8 100644 --- a/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServlet.java +++ b/cas-client-uportal/src/main/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServlet.java @@ -16,22 +16,24 @@ import javax.servlet.ServletException; * Implementation of AbstractProxyReceptorServlet that retrieves the * ProxyGrantingTicket storage from the Portal Application Context instead of a * WebApplicationContext. - * + * * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ public final class UPortalConfiguredProxyReceptorServlet extends - AbstractProxyReceptorServlet { + AbstractProxyReceptorServlet { - /** Unique Id for Serialization. */ + /** + * Unique Id for Serialization. + */ private static final long serialVersionUID = 6596608588362834646L; public void init(final ServletConfig servletConfig) throws ServletException { logger.info("Retrieving ProxyGrantingTicketStorage from PortalApplicationContextFacade."); setProxyGrantingTicketStorage((ProxyGrantingTicketStorage) PortalApplicationContextFacade - .getPortalApplicationContext() - .getBean( - AbstractCasSecurityContextFactory.CONST_CAS_PROXY_GRANTING_TICKET_STORAGE)); + .getPortalApplicationContext() + .getBean( + AbstractCasSecurityContextFactory.CONST_CAS_PROXY_GRANTING_TICKET_STORAGE)); } } diff --git a/cas-client-uportal/src/main/resources/uportalCasConfigurationContext.xml b/cas-client-uportal/src/main/resources/uportalCasConfigurationContext.xml index 98a413b..fc09c28 100644 --- a/cas-client-uportal/src/main/resources/uportalCasConfigurationContext.xml +++ b/cas-client-uportal/src/main/resources/uportalCasConfigurationContext.xml @@ -2,72 +2,65 @@ - - - + + + - - - - - - + + + + + + + + - + + + - - - - + - - - - - - - - - - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactoryTests.java b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactoryTests.java index c397b64..edcb4db 100644 --- a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactoryTests.java +++ b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextFactoryTests.java @@ -8,7 +8,7 @@ import org.jasig.portal.security.ISecurityContext; * @version $Revision$ $Date$ * @since 3.0 */ -public class CasSecurityContextFactoryTests extends TestCase { +public final class CasSecurityContextFactoryTests extends TestCase { private CasSecurityContextFactory casSecurityContextFactory; diff --git a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextTests.java b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextTests.java index 5817c60..42cc5bb 100644 --- a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextTests.java +++ b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/CasSecurityContextTests.java @@ -4,11 +4,11 @@ import junit.framework.TestCase; import org.jasig.cas.authentication.principal.Service; import org.jasig.cas.authentication.principal.SimplePrincipal; import org.jasig.cas.authentication.principal.SimpleService; +import org.jasig.cas.client.proxy.ProxyRetriever; import org.jasig.cas.client.validation.Assertion; import org.jasig.cas.client.validation.AssertionImpl; import org.jasig.cas.client.validation.TicketValidator; import org.jasig.cas.client.validation.ValidationException; -import org.jasig.cas.client.proxy.ProxyRetriever; import org.jasig.portal.security.PortalSecurityException; import java.util.HashMap; @@ -18,7 +18,7 @@ import java.util.HashMap; * @version $Revision$ $Date$ * @since 3.0 */ -public class CasSecurityContextTests extends TestCase { +public final class CasSecurityContextTests extends TestCase { private CasSecurityContext context; diff --git a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ServiceHolderTests.java b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ServiceHolderTests.java index a51511a..143b996 100644 --- a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ServiceHolderTests.java +++ b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ServiceHolderTests.java @@ -8,9 +8,8 @@ import org.jasig.cas.authentication.principal.SimpleService; * @author Scott Battaglia * @version $Revision$ $Datet$ * @since 3.0 - * */ -public class ServiceHolderTests extends TestCase { +public final class ServiceHolderTests extends TestCase { public void testSetGetService() { final Service service = new SimpleService("test"); diff --git a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactoryTests.java b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactoryTests.java index 24857ee..e15b4c2 100644 --- a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactoryTests.java +++ b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextFactoryTests.java @@ -8,7 +8,7 @@ import org.jasig.portal.security.ISecurityContext; * @version $Revision$ $Date$ * @since 3.0 */ -public class ThreadLocalAwareCasSecurityContextFactoryTests extends TestCase { +public final class ThreadLocalAwareCasSecurityContextFactoryTests extends TestCase { private ThreadLocalAwareCasSecurityContextFactory factory; diff --git a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextTests.java b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextTests.java index 30125a2..8fc664f 100644 --- a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextTests.java +++ b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasSecurityContextTests.java @@ -7,7 +7,7 @@ import org.jasig.cas.authentication.principal.SimpleService; /** * @author Scott */ -public class ThreadLocalAwareCasSecurityContextTests extends TestCase { +public final class ThreadLocalAwareCasSecurityContextTests extends TestCase { private ThreadLocalAwareCasSecurityContext context; diff --git a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilterTests.java b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilterTests.java index 7983ff0..2a2f2b2 100644 --- a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilterTests.java +++ b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/ThreadLocalAwareCasServiceFilterTests.java @@ -1,9 +1,9 @@ package org.jasig.cas.client.integration.uportal; import junit.framework.TestCase; +import org.jasig.cas.authentication.principal.SimpleService; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; -import org.jasig.cas.authentication.principal.SimpleService; import javax.servlet.FilterChain; import javax.servlet.ServletException; @@ -16,15 +16,13 @@ import java.io.IOException; * @version $Revision$ $Date$ * @since 3.0 */ -public class ThreadLocalAwareCasServiceFilterTests extends TestCase { +public final class ThreadLocalAwareCasServiceFilterTests extends TestCase { private ThreadLocalAwareCasServiceFilter filter; protected void setUp() throws Exception { - this.filter = new ThreadLocalAwareCasServiceFilter(); - this.filter.setServiceUrl("http://localhost"); - this.filter.init(); + this.filter = new ThreadLocalAwareCasServiceFilter(null, "http://localhost"); } public void testServiceSetter() throws IOException, ServletException { diff --git a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServletTests.java b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServletTests.java index 35acb2a..70f9d44 100644 --- a/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServletTests.java +++ b/cas-client-uportal/src/test/java/org/jasig/cas/client/integration/uportal/UPortalConfiguredProxyReceptorServletTests.java @@ -1,15 +1,15 @@ package org.jasig.cas.client.integration.uportal; import junit.framework.TestCase; -import org.springframework.mock.web.MockServletContext; import org.springframework.mock.web.MockServletConfig; +import org.springframework.mock.web.MockServletContext; /** * @author Scott Battaglia * @version $Revision$ $Date$ * @since 3.0 */ -public class UPortalConfiguredProxyReceptorServletTests extends TestCase { +public final class UPortalConfiguredProxyReceptorServletTests extends TestCase { public void testInitialization() throws Exception { final UPortalConfiguredProxyReceptorServlet servlet = new UPortalConfiguredProxyReceptorServlet(); diff --git a/cas-client-uportal/src/test/resources/properties/uPortalConfigContext.xml b/cas-client-uportal/src/test/resources/properties/uPortalConfigContext.xml index 6fab676..39d6bc1 100644 --- a/cas-client-uportal/src/test/resources/properties/uPortalConfigContext.xml +++ b/cas-client-uportal/src/test/resources/properties/uPortalConfigContext.xml @@ -1,64 +1,58 @@ - - - - - - - + + + + + + + + - - - - + + + - - - - - - - + - - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cas-client.iws b/cas-client.iws index c5d372b..29c3953 100644 --- a/cas-client.iws +++ b/cas-client.iws @@ -18,7 +18,84 @@