diff --git a/core/src/main/java/org/acegisecurity/providers/cas/CasAuthenticationProvider.java b/core/src/main/java/org/acegisecurity/providers/cas/CasAuthenticationProvider.java index cd4b5fbad8..bfb4a2b616 100644 --- a/core/src/main/java/org/acegisecurity/providers/cas/CasAuthenticationProvider.java +++ b/core/src/main/java/org/acegisecurity/providers/cas/CasAuthenticationProvider.java @@ -22,6 +22,7 @@ import org.acegisecurity.BadCredentialsException; import org.acegisecurity.providers.AuthenticationProvider; import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; +import org.acegisecurity.providers.cas.cache.NullStatelessTicketCache; import org.acegisecurity.ui.cas.CasProcessingFilter; @@ -59,7 +60,7 @@ public class CasAuthenticationProvider implements AuthenticationProvider, Initia private CasAuthoritiesPopulator casAuthoritiesPopulator; private CasProxyDecider casProxyDecider; protected MessageSourceAccessor messages = AcegiMessageSource.getAccessor(); - private StatelessTicketCache statelessTicketCache; + private StatelessTicketCache statelessTicketCache = new NullStatelessTicketCache(); private String key; private TicketValidator ticketValidator; diff --git a/core/src/main/java/org/acegisecurity/providers/cas/cache/NullStatelessTicketCache.java b/core/src/main/java/org/acegisecurity/providers/cas/cache/NullStatelessTicketCache.java new file mode 100644 index 0000000000..a8abf7d185 --- /dev/null +++ b/core/src/main/java/org/acegisecurity/providers/cas/cache/NullStatelessTicketCache.java @@ -0,0 +1,63 @@ +/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.acegisecurity.providers.cas.cache; + +import org.acegisecurity.providers.cas.CasAuthenticationProvider; +import org.acegisecurity.providers.cas.CasAuthenticationToken; +import org.acegisecurity.providers.cas.StatelessTicketCache; + +/** + * Implementation of @link {@link StatelessTicketCache} that has no backing cache. Useful + * in instances where storing of tickets for stateless session management is not required. + *
+ * This is the default StatelessTicketCache of the @link {@link CasAuthenticationProvider} to + * eliminate the unnecessary dependency on EhCache that applications have even if they are not using + * the stateless session management. + * + * @author Scott Battaglia + * @version $Id$ + * + *@see CasAuthenticationProvider + */ +public final class NullStatelessTicketCache implements StatelessTicketCache { + + /** + * @return null since we are not storing any tickets. + */ + public CasAuthenticationToken getByTicketId(final String serviceTicket) { + return null; + } + + /** + * This is a no-op since we are not storing tickets. + */ + public void putTicketInCache(final CasAuthenticationToken token) { + // nothing to do + } + + /** + * This is a no-op since we are not storing tickets. + */ + public void removeTicketFromCache(final CasAuthenticationToken token) { + // nothing to do + } + + /** + * This is a no-op since we are not storing tickets. + */ + public void removeTicketFromCache(final String serviceTicket) { + // nothing to do + } +} diff --git a/core/src/test/java/org/acegisecurity/providers/cas/CasAuthenticationProviderTests.java b/core/src/test/java/org/acegisecurity/providers/cas/CasAuthenticationProviderTests.java index 67b8f37adc..911482bbe1 100644 --- a/core/src/test/java/org/acegisecurity/providers/cas/CasAuthenticationProviderTests.java +++ b/core/src/test/java/org/acegisecurity/providers/cas/CasAuthenticationProviderTests.java @@ -246,6 +246,8 @@ public class CasAuthenticationProviderTests extends TestCase { public void testDetectsMissingStatelessTicketCache() throws Exception { CasAuthenticationProvider cap = new CasAuthenticationProvider(); + // set this explicitly to null to test failure + cap.setStatelessTicketCache(null); cap.setCasAuthoritiesPopulator(new MockAuthoritiesPopulator()); cap.setCasProxyDecider(new MockProxyDecider()); cap.setKey("qwerty"); diff --git a/core/src/test/java/org/acegisecurity/providers/cas/cache/NullStatelessTicketCacheTests.java b/core/src/test/java/org/acegisecurity/providers/cas/cache/NullStatelessTicketCacheTests.java new file mode 100644 index 0000000000..d6cb1f9f01 --- /dev/null +++ b/core/src/test/java/org/acegisecurity/providers/cas/cache/NullStatelessTicketCacheTests.java @@ -0,0 +1,61 @@ +/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.acegisecurity.providers.cas.cache; + +import java.util.ArrayList; +import java.util.List; + +import org.acegisecurity.GrantedAuthority; +import org.acegisecurity.GrantedAuthorityImpl; +import org.acegisecurity.providers.cas.CasAuthenticationToken; +import org.acegisecurity.providers.cas.StatelessTicketCache; +import org.acegisecurity.userdetails.User; + +import junit.framework.TestCase; + +/** + * Test cases for the @link {@link NullStatelessTicketCache} + * + * @author Scott Battaglia + * @version $Id$ + * + */ +public class NullStatelessTicketCacheTests extends TestCase { + + private StatelessTicketCache cache = new NullStatelessTicketCache(); + + public void testGetter() { + assertNull(cache.getByTicketId(null)); + assertNull(cache.getByTicketId("test")); + } + + public void testInsertAndGet() { + final CasAuthenticationToken token = getToken(); + cache.putTicketInCache(token); + assertNull(cache.getByTicketId((String) token.getCredentials())); + } + + private CasAuthenticationToken getToken() { + List proxyList = new ArrayList(); + proxyList.add("https://localhost/newPortal/j_spring_cas_security_check"); + + User user = new User("marissa", "password", true, true, true, true, + new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")}); + + return new CasAuthenticationToken("key", user, "ST-0-ER94xMJmn6pha35CQRoZ", + new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")}, user, + proxyList, "PGTIOU-0-R0zlgrl4pdAQwBvJWO3vnNpevwqStbSGcq3vKB2SqSFFRnjPHt"); + } +}