1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 package org.apache.commons.httpclient;
32
33 import org.apache.commons.httpclient.util.LangUtils;
34
35 /*** {@link Credentials} for use with the NTLM authentication scheme which requires additional
36 * information.
37 *
38 * @author <a href="mailto:adrian@ephox.com">Adrian Sutton</a>
39 * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
40 *
41 * @version $Revision$ $Date$
42 *
43 * @since 2.0
44 */
45 public class NTCredentials extends UsernamePasswordCredentials {
46
47
48
49 /*** The Domain to authenticate with. */
50 private String domain;
51
52 /*** The host the authentication request is originating from. */
53 private String host;
54
55
56
57
58 /***
59 * Default constructor.
60 *
61 * @deprecated Do not use. Null user name, domain & host no longer allowed
62 */
63 public NTCredentials() {
64 super();
65 }
66
67 /***
68 * Constructor.
69 * @param userName The user name. This should not include the domain to authenticate with.
70 * For example: "user" is correct whereas "DOMAIN//user" is not.
71 * @param password The password.
72 * @param host The host the authentication request is originating from. Essentially, the
73 * computer name for this machine.
74 * @param domain The domain to authenticate within.
75 */
76 public NTCredentials(String userName, String password, String host,
77 String domain) {
78 super(userName, password);
79 if (domain == null) {
80 throw new IllegalArgumentException("Domain may not be null");
81 }
82 this.domain = domain;
83 if (host == null) {
84 throw new IllegalArgumentException("Host may not be null");
85 }
86 this.host = host;
87 }
88
89
90
91 /***
92 * Sets the domain to authenticate with. The domain may not be null.
93 *
94 * @param domain the NT domain to authenticate in.
95 *
96 * @see #getDomain()
97 *
98 * @deprecated Do not use. The NTCredentials objects should be immutable
99 */
100 public void setDomain(String domain) {
101 if (domain == null) {
102 throw new IllegalArgumentException("Domain may not be null");
103 }
104 this.domain = domain;
105 }
106
107 /***
108 * Retrieves the name to authenticate with.
109 *
110 * @return String the domain these credentials are intended to authenticate with.
111 *
112 * @see #setDomain(String)
113 *
114 */
115 public String getDomain() {
116 return domain;
117 }
118
119 /***
120 * Sets the host name of the computer originating the request. The host name may
121 * not be null.
122 *
123 * @param host the Host the user is logged into.
124 *
125 * @deprecated Do not use. The NTCredentials objects should be immutable
126 */
127 public void setHost(String host) {
128 if (host == null) {
129 throw new IllegalArgumentException("Host may not be null");
130 }
131 this.host = host;
132 }
133
134 /***
135 * Retrieves the host name of the computer originating the request.
136 *
137 * @return String the host the user is logged into.
138 */
139 public String getHost() {
140 return this.host;
141 }
142
143 /***
144 * Return a string representation of this object.
145 * @return A string represenation of this object.
146 */
147 public String toString() {
148 final StringBuffer sbResult = new StringBuffer(super.toString());
149
150 sbResult.append("@");
151 sbResult.append(this.host);
152 sbResult.append(".");
153 sbResult.append(this.domain);
154
155 return sbResult.toString();
156 }
157
158 /***
159 * Computes a hash code based on all the case-sensitive parts of the credentials object.
160 *
161 * @return The hash code for the credentials.
162 */
163 public int hashCode() {
164 int hash = super.hashCode();
165 hash = LangUtils.hashCode(hash, this.host);
166 hash = LangUtils.hashCode(hash, this.domain);
167 return hash;
168 }
169
170 /***
171 * Performs a case-sensitive check to see if the components of the credentials
172 * are the same.
173 *
174 * @param o The object to match.
175 *
176 * @return <code>true</code> if all of the credentials match.
177 */
178 public boolean equals(Object o) {
179 if (o == null) return false;
180 if (this == o) return true;
181 if (super.equals(o) ) {
182 if (o instanceof NTCredentials) {
183 NTCredentials that = (NTCredentials) o;
184
185 return LangUtils.equals(this.domain, that.domain)
186 && LangUtils.equals(this.host, that.host);
187 }
188 }
189
190 return false;
191 }
192 }