1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.providers.cas;
17
18 import org.acegisecurity.GrantedAuthority;
19 import org.acegisecurity.providers.AbstractAuthenticationToken;
20 import org.acegisecurity.userdetails.UserDetails;
21
22 import org.springframework.util.Assert;
23
24 import java.io.Serializable;
25
26 import java.util.List;
27
28
29 /***
30 * Represents a successful CAS <code>Authentication</code>.
31 *
32 * @author Ben Alex
33 * @version $Id: CasAuthenticationToken.java,v 1.10 2005/11/29 13:10:07 benalex Exp $
34 */
35 public class CasAuthenticationToken extends AbstractAuthenticationToken
36 implements Serializable {
37
38
39 private List proxyList;
40 private Object credentials;
41 private Object principal;
42 private String proxyGrantingTicketIou;
43 private UserDetails userDetails;
44 private GrantedAuthority[] authorities;
45 private boolean authenticated;
46 private int keyHash;
47
48
49
50 /***
51 * Constructor.
52 *
53 * @param key to identify if this object made by a given {@link
54 * CasAuthenticationProvider}
55 * @param principal the username from CAS (cannot be <code>null</code>)
56 * @param credentials the service/proxy ticket ID from CAS (cannot be
57 * <code>null</code>)
58 * @param authorities the authorities granted to the user (from {@link
59 * CasAuthoritiesPopulator}) (cannot be <code>null</code>)
60 * @param userDetails the user details (from {@link
61 * CasAuthoritiesPopulator}) (cannot be <code>null</code>)
62 * @param proxyList the list of proxies from CAS (cannot be
63 * <code>null</code>)
64 * @param proxyGrantingTicketIou the PGT-IOU ID from CAS (cannot be
65 * <code>null</code>, but may be an empty <code>String</code> if no
66 * PGT-IOU ID was provided)
67 *
68 * @throws IllegalArgumentException if a <code>null</code> was passed
69 */
70 public CasAuthenticationToken(String key, Object principal,
71 Object credentials, GrantedAuthority[] authorities,
72 UserDetails userDetails, List proxyList, String proxyGrantingTicketIou) {
73 if ((key == null) || ("".equals(key)) || (principal == null)
74 || "".equals(principal) || (credentials == null)
75 || "".equals(credentials) || (authorities == null)
76 || (userDetails == null) || (proxyList == null)
77 || (proxyGrantingTicketIou == null)) {
78 throw new IllegalArgumentException(
79 "Cannot pass null or empty values to constructor");
80 }
81
82 for (int i = 0; i < authorities.length; i++) {
83 Assert.notNull(authorities[i],
84 "Granted authority element " + i
85 + " is null - GrantedAuthority[] cannot contain any null elements");
86 }
87
88 this.keyHash = key.hashCode();
89 this.principal = principal;
90 this.credentials = credentials;
91 this.authorities = authorities;
92 this.userDetails = userDetails;
93 this.proxyList = proxyList;
94 this.proxyGrantingTicketIou = proxyGrantingTicketIou;
95 this.authenticated = true;
96 }
97
98 protected CasAuthenticationToken() {
99 throw new IllegalArgumentException("Cannot use default constructor");
100 }
101
102
103
104 public void setAuthenticated(boolean isAuthenticated) {
105 this.authenticated = isAuthenticated;
106 }
107
108 public boolean isAuthenticated() {
109 return this.authenticated;
110 }
111
112 public GrantedAuthority[] getAuthorities() {
113 return this.authorities;
114 }
115
116 public Object getCredentials() {
117 return this.credentials;
118 }
119
120 public int getKeyHash() {
121 return this.keyHash;
122 }
123
124 public Object getPrincipal() {
125 return this.principal;
126 }
127
128 /***
129 * Obtains the proxy granting ticket IOU.
130 *
131 * @return the PGT IOU-ID or an empty <code>String</code> if no proxy
132 * callback was requested when validating the service ticket
133 */
134 public String getProxyGrantingTicketIou() {
135 return proxyGrantingTicketIou;
136 }
137
138 public List getProxyList() {
139 return proxyList;
140 }
141
142 public UserDetails getUserDetails() {
143 return userDetails;
144 }
145
146 public boolean equals(Object obj) {
147 if (!super.equals(obj)) {
148 return false;
149 }
150
151 if (obj instanceof CasAuthenticationToken) {
152 CasAuthenticationToken test = (CasAuthenticationToken) obj;
153
154
155 if (!this.getProxyGrantingTicketIou().equals(test
156 .getProxyGrantingTicketIou())) {
157 return false;
158 }
159
160
161 if (!this.getProxyList().equals(test.getProxyList())) {
162 return false;
163 }
164
165 if (this.getKeyHash() != test.getKeyHash()) {
166 return false;
167 }
168
169 return true;
170 }
171
172 return false;
173 }
174
175 public String toString() {
176 StringBuffer sb = new StringBuffer();
177 sb.append(super.toString());
178 sb.append("; Credentials (Service/Proxy Ticket): " + this.credentials);
179 sb.append("; Proxy-Granting Ticket IOU: " + this.proxyGrantingTicketIou);
180 sb.append("; Proxy List: " + this.proxyList.toString());
181
182 return sb.toString();
183 }
184 }