23
23
24
24
import java .nio .charset .Charset ;
25
25
import java .security .MessageDigest ;
26
+ import java .util .Map ;
26
27
import java .util .concurrent .ThreadLocalRandom ;
27
28
28
29
import static java .nio .charset .StandardCharsets .*;
@@ -60,6 +61,10 @@ public class Realm {
60
61
private final String ntlmDomain ;
61
62
private final boolean useAbsoluteURI ;
62
63
private final boolean omitQuery ;
64
+ private final Map <String , String > customLoginConfig ;
65
+ private final String servicePrincipalName ;
66
+ private final boolean useCanonicalHostname ;
67
+ private final String loginContextName ;
63
68
64
69
private Realm (AuthScheme scheme ,
65
70
String principal ,
@@ -78,11 +83,15 @@ private Realm(AuthScheme scheme,
78
83
String ntlmDomain ,
79
84
String ntlmHost ,
80
85
boolean useAbsoluteURI ,
81
- boolean omitQuery ) {
86
+ boolean omitQuery ,
87
+ String servicePrincipalName ,
88
+ boolean useCanonicalHostname ,
89
+ Map <String , String > customLoginConfig ,
90
+ String loginContextName ) {
82
91
83
92
this .scheme = assertNotNull (scheme , "scheme" );
84
- this .principal = assertNotNull ( principal , "principal" ) ;
85
- this .password = assertNotNull ( password , "password" ) ;
93
+ this .principal = principal ;
94
+ this .password = password ;
86
95
this .realmName = realmName ;
87
96
this .nonce = nonce ;
88
97
this .algorithm = algorithm ;
@@ -98,6 +107,10 @@ private Realm(AuthScheme scheme,
98
107
this .ntlmHost = ntlmHost ;
99
108
this .useAbsoluteURI = useAbsoluteURI ;
100
109
this .omitQuery = omitQuery ;
110
+ this .servicePrincipalName = servicePrincipalName ;
111
+ this .useCanonicalHostname = useCanonicalHostname ;
112
+ this .customLoginConfig = customLoginConfig ;
113
+ this .loginContextName = loginContextName ;
101
114
}
102
115
103
116
public String getPrincipal () {
@@ -187,12 +200,48 @@ public boolean isOmitQuery() {
187
200
return omitQuery ;
188
201
}
189
202
203
+ public Map <String , String > getCustomLoginConfig () {
204
+ return customLoginConfig ;
205
+ }
206
+
207
+ public String getServicePrincipalName () {
208
+ return servicePrincipalName ;
209
+ }
210
+
211
+ public boolean isUseCanonicalHostname () {
212
+ return useCanonicalHostname ;
213
+ }
214
+
215
+ public String getLoginContextName () {
216
+ return loginContextName ;
217
+ }
218
+
190
219
@ Override
191
220
public String toString () {
192
- return "Realm{" + "principal='" + principal + '\'' + ", scheme=" + scheme + ", realmName='" + realmName + '\''
193
- + ", nonce='" + nonce + '\'' + ", algorithm='" + algorithm + '\'' + ", response='" + response + '\''
194
- + ", qop='" + qop + '\'' + ", nc='" + nc + '\'' + ", cnonce='" + cnonce + '\'' + ", uri='" + uri + '\''
195
- + ", useAbsoluteURI='" + useAbsoluteURI + '\'' + ", omitQuery='" + omitQuery + '\'' + '}' ;
221
+ return "Realm{" +
222
+ "principal='" + principal + '\'' +
223
+ ", password='" + password + '\'' +
224
+ ", scheme=" + scheme +
225
+ ", realmName='" + realmName + '\'' +
226
+ ", nonce='" + nonce + '\'' +
227
+ ", algorithm='" + algorithm + '\'' +
228
+ ", response='" + response + '\'' +
229
+ ", opaque='" + opaque + '\'' +
230
+ ", qop='" + qop + '\'' +
231
+ ", nc='" + nc + '\'' +
232
+ ", cnonce='" + cnonce + '\'' +
233
+ ", uri=" + uri +
234
+ ", usePreemptiveAuth=" + usePreemptiveAuth +
235
+ ", charset=" + charset +
236
+ ", ntlmHost='" + ntlmHost + '\'' +
237
+ ", ntlmDomain='" + ntlmDomain + '\'' +
238
+ ", useAbsoluteURI=" + useAbsoluteURI +
239
+ ", omitQuery=" + omitQuery +
240
+ ", customLoginConfig=" + customLoginConfig +
241
+ ", servicePrincipalName='" + servicePrincipalName + '\'' +
242
+ ", useCanonicalHostname=" + useCanonicalHostname +
243
+ ", loginContextName='" + loginContextName + '\'' +
244
+ '}' ;
196
245
}
197
246
198
247
public enum AuthScheme {
@@ -223,6 +272,18 @@ public static class Builder {
223
272
private String ntlmHost = "localhost" ;
224
273
private boolean useAbsoluteURI = false ;
225
274
private boolean omitQuery ;
275
+ /**
276
+ * Kerberos/Spnego properties
277
+ */
278
+ private Map <String , String > customLoginConfig ;
279
+ private String servicePrincipalName ;
280
+ private boolean useCanonicalHostname ;
281
+ private String loginContextName ;
282
+
283
+ public Builder () {
284
+ this .principal = null ;
285
+ this .password = null ;
286
+ }
226
287
227
288
public Builder (String principal , String password ) {
228
289
this .principal = principal ;
@@ -311,6 +372,26 @@ public Builder setCharset(Charset charset) {
311
372
return this ;
312
373
}
313
374
375
+ public Builder setCustomLoginConfig (Map <String , String > customLoginConfig ) {
376
+ this .customLoginConfig = customLoginConfig ;
377
+ return this ;
378
+ }
379
+
380
+ public Builder setServicePrincipalName (String servicePrincipalName ) {
381
+ this .servicePrincipalName = servicePrincipalName ;
382
+ return this ;
383
+ }
384
+
385
+ public Builder setUseCanonicalHostname (boolean useCanonicalHostname ) {
386
+ this .useCanonicalHostname = useCanonicalHostname ;
387
+ return this ;
388
+ }
389
+
390
+ public Builder setLoginContextName (String loginContextName ) {
391
+ this .loginContextName = loginContextName ;
392
+ return this ;
393
+ }
394
+
314
395
private String parseRawQop (String rawQop ) {
315
396
String [] rawServerSupportedQops = rawQop .split ("," );
316
397
String [] serverSupportedQops = new String [rawServerSupportedQops .length ];
@@ -501,7 +582,11 @@ public Realm build() {
501
582
ntlmDomain ,
502
583
ntlmHost ,
503
584
useAbsoluteURI ,
504
- omitQuery );
585
+ omitQuery ,
586
+ servicePrincipalName ,
587
+ useCanonicalHostname ,
588
+ customLoginConfig ,
589
+ loginContextName );
505
590
}
506
591
}
507
592
}
0 commit comments