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 }