1
2
3
4
5
6
7
8
9
10
11
12
13
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
44
45 private static final Log logger = LogFactory.getLog(EhCacheBasedTicketCache.class);
46
47
48
49 private Cache cache;
50
51
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 }