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.dao.cache;
    17
    18  import org.acegisecurity.providers.dao.UserCache;
    19  import org.acegisecurity.userdetails.UserDetails;
    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 <code>User</code> objects using a Spring IoC defined <A
    36   * HREF="http://ehcache.sourceforge.net">EHCACHE</a>.
    37   *
    38   * @author Ben Alex
    39   * @version $Id: EhCacheBasedUserCache.java,v 1.9 2005/11/29 13:10:11 benalex Exp $
    40   */
    41  public class EhCacheBasedUserCache implements UserCache, InitializingBean {
    42      //~ Static fields/initializers =============================================
    43
    44      private static final Log logger = LogFactory.getLog(EhCacheBasedUserCache.class);
    45
    46      //~ Instance fields ========================================================
    47
    48      private Cache cache;
    49
    50      //~ Methods ================================================================
    51
    52      public void setCache(Cache cache) {
    53          this.cache = cache;
    54      }
    55
    56      public Cache getCache() {
    57          return cache;
    58      }
    59
    60      public UserDetails getUserFromCache(String username) {
    61          Element element = null;
    62
    63          try {
    64              element = cache.get(username);
    65          } catch (CacheException cacheException) {
    66              throw new DataRetrievalFailureException("Cache failure: "
    67                  + cacheException.getMessage());
    68          }
    69
    70          if (logger.isDebugEnabled()) {
    71              logger.debug("Cache hit: " + (element != null) + "; username: "
    72                  + username);
    73          }
    74
    75          if (element == null) {
    76              return null;
    77          } else {
    78              return (UserDetails) element.getValue();
    79          }
    80      }
    81
    82      public void afterPropertiesSet() throws Exception {
    83          Assert.notNull(cache, "cache mandatory");
    84      }
    85
    86      public void putUserInCache(UserDetails user) {
    87          Element element = new Element(user.getUsername(), user);
    88
    89          if (logger.isDebugEnabled()) {
    90              logger.debug("Cache put: " + element.getKey());
    91          }
    92
    93          cache.put(element);
    94      }
    95
    96      public void removeUserFromCache(UserDetails user) {
    97          if (logger.isDebugEnabled()) {
    98              logger.debug("Cache remove: " + user.getUsername());
    99          }
    100
    101         this.removeUserFromCache(user.getUsername());
    102     }
    103
    104     public void removeUserFromCache(String username) {
    105         cache.remove(username);
    106     }
    107 }