View Javadoc

1   /*
2    * $HeadURL: https://svn.apache.org/repos/asf/httpcomponents/oac.hc3x/trunk/src/java/org/apache/commons/httpclient/NTCredentials.java $
3    * $Revision$
4    * $Date$
5    *
6    * ====================================================================
7    *
8    *  Licensed to the Apache Software Foundation (ASF) under one or more
9    *  contributor license agreements.  See the NOTICE file distributed with
10   *  this work for additional information regarding copyright ownership.
11   *  The ASF licenses this file to You under the Apache License, Version 2.0
12   *  (the "License"); you may not use this file except in compliance with
13   *  the License.  You may obtain a copy of the License at
14   *
15   *      http://www.apache.org/licenses/LICENSE-2.0
16   *
17   *  Unless required by applicable law or agreed to in writing, software
18   *  distributed under the License is distributed on an "AS IS" BASIS,
19   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20   *  See the License for the specific language governing permissions and
21   *  limitations under the License.
22   * ====================================================================
23   *
24   * This software consists of voluntary contributions made by many
25   * individuals on behalf of the Apache Software Foundation.  For more
26   * information on the Apache Software Foundation, please see
27   * <http://www.apache.org/>.
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      // ----------------------------------------------------- Instance Variables
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      // ----------------------------------------------------------- Constructors
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      // ------------------------------------------------------- Instance Methods
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 }