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 }