View Javadoc

1   /* Copyright 2004 Acegi Technology Pty Limited
2    *
3    * Licensed under the Apache License, Version 2.0 (the "License");
4    * you may not use this file except in compliance with the License.
5    * You may obtain a copy of the License at
6    *
7    *     http://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  package org.acegisecurity.providers.cas.cache;
17  
18  import org.acegisecurity.providers.cas.CasAuthenticationToken;
19  import org.acegisecurity.providers.cas.StatelessTicketCache;
20  
21  import net.sf.ehcache.Cache;
22  import net.sf.ehcache.CacheException;
23  import net.sf.ehcache.Element;
24  
25  import org.apache.commons.logging.Log;
26  import org.apache.commons.logging.LogFactory;
27  
28  import org.springframework.beans.factory.InitializingBean;
29  
30  import org.springframework.dao.DataRetrievalFailureException;
31  import org.springframework.util.Assert;
32  
33  
34  /***
35   * Caches tickets using a Spring IoC defined <A
36   * HREF="http://ehcache.sourceforge.net">EHCACHE</a>.
37   *
38   * @author Ben Alex
39   * @version $Id: EhCacheBasedTicketCache.java,v 1.8 2005/11/17 00:55:48 benalex Exp $
40   */
41  public class EhCacheBasedTicketCache implements StatelessTicketCache,
42      InitializingBean {
43      //~ Static fields/initializers =============================================
44  
45      private static final Log logger = LogFactory.getLog(EhCacheBasedTicketCache.class);
46  
47      //~ Instance fields ========================================================
48  
49      private Cache cache;
50  
51      //~ Methods ================================================================
52  
53      public CasAuthenticationToken getByTicketId(String serviceTicket) {
54          Element element = null;
55  
56          try {
57              element = cache.get(serviceTicket);
58          } catch (CacheException cacheException) {
59              throw new DataRetrievalFailureException("Cache failure: "
60                  + cacheException.getMessage());
61          }
62  
63          if (logger.isDebugEnabled()) {
64              logger.debug("Cache hit: " + (element != null)
65                  + "; service ticket: " + serviceTicket);
66          }
67  
68          if (element == null) {
69              return null;
70          } else {
71              return (CasAuthenticationToken) element.getValue();
72          }
73      }
74  
75      public void setCache(Cache cache) {
76          this.cache = cache;
77      }
78  
79      public Cache getCache() {
80          return cache;
81      }
82  
83      public void afterPropertiesSet() throws Exception {
84          Assert.notNull(cache, "cache mandatory");
85      }
86  
87      public void putTicketInCache(CasAuthenticationToken token) {
88          Element element = new Element(token.getCredentials().toString(), token);
89  
90          if (logger.isDebugEnabled()) {
91              logger.debug("Cache put: " + element.getKey());
92          }
93  
94          cache.put(element);
95      }
96  
97      public void removeTicketFromCache(CasAuthenticationToken token) {
98          if (logger.isDebugEnabled()) {
99              logger.debug("Cache remove: " + token.getCredentials().toString());
100         }
101 
102         this.removeTicketFromCache(token.getCredentials().toString());
103     }
104 
105     public void removeTicketFromCache(String serviceTicket) {
106         cache.remove(serviceTicket);
107     }
108 }