Source code: org/acegisecurity/providers/dao/cache/EhCacheBasedUserCache.java
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 }