42
42
import org .ietf .jgss .GSSManager ;
43
43
import org .ietf .jgss .GSSName ;
44
44
import org .ietf .jgss .Oid ;
45
+ import org .jetbrains .annotations .Nullable ;
45
46
import org .slf4j .Logger ;
46
47
import org .slf4j .LoggerFactory ;
47
48
@@ -70,17 +71,19 @@ public class SpnegoEngine {
70
71
private static final String KERBEROS_OID = "1.2.840.113554.1.2.2" ;
71
72
private static final Map <String , SpnegoEngine > instances = new HashMap <>();
72
73
private final Logger log = LoggerFactory .getLogger (getClass ());
73
- private final SpnegoTokenGenerator spnegoGenerator ;
74
- private final String username ;
75
- private final String password ;
76
- private final String servicePrincipalName ;
77
- private final String realmName ;
74
+ private final @ Nullable SpnegoTokenGenerator spnegoGenerator ;
75
+ private final @ Nullable String username ;
76
+ private final @ Nullable String password ;
77
+ private final @ Nullable String servicePrincipalName ;
78
+ private final @ Nullable String realmName ;
78
79
private final boolean useCanonicalHostname ;
79
- private final String loginContextName ;
80
- private final Map <String , String > customLoginConfig ;
80
+ private final @ Nullable String loginContextName ;
81
+ private final @ Nullable Map <String , String > customLoginConfig ;
81
82
82
- public SpnegoEngine (final String username , final String password , final String servicePrincipalName , final String realmName , final boolean useCanonicalHostname ,
83
- final Map <String , String > customLoginConfig , final String loginContextName , final SpnegoTokenGenerator spnegoGenerator ) {
83
+ public SpnegoEngine (final @ Nullable String username , final @ Nullable String password ,
84
+ final @ Nullable String servicePrincipalName , final @ Nullable String realmName ,
85
+ final boolean useCanonicalHostname , final @ Nullable Map <String , String > customLoginConfig ,
86
+ final @ Nullable String loginContextName , final @ Nullable SpnegoTokenGenerator spnegoGenerator ) {
84
87
this .username = username ;
85
88
this .password = password ;
86
89
this .servicePrincipalName = servicePrincipalName ;
@@ -95,8 +98,10 @@ public SpnegoEngine() {
95
98
this (null , null , null , null , true , null , null , null );
96
99
}
97
100
98
- public static SpnegoEngine instance (final String username , final String password , final String servicePrincipalName , final String realmName ,
99
- final boolean useCanonicalHostname , final Map <String , String > customLoginConfig , final String loginContextName ) {
101
+ public static SpnegoEngine instance (final @ Nullable String username , final @ Nullable String password ,
102
+ final @ Nullable String servicePrincipalName , final @ Nullable String realmName ,
103
+ final boolean useCanonicalHostname , final @ Nullable Map <String , String > customLoginConfig ,
104
+ final @ Nullable String loginContextName ) {
100
105
String key = "" ;
101
106
if (customLoginConfig != null && !customLoginConfig .isEmpty ()) {
102
107
StringBuilder customLoginConfigKeyValues = new StringBuilder ();
@@ -151,7 +156,6 @@ public String generateToken(String host) throws SpnegoEngineException {
151
156
// Try SPNEGO by default, fall back to Kerberos later if error
152
157
negotiationOid = new Oid (SPNEGO_OID );
153
158
154
- boolean tryKerberos = false ;
155
159
String spn = getCompleteServicePrincipalName (host );
156
160
try {
157
161
GSSManager manager = GSSManager .getInstance ();
@@ -181,13 +185,12 @@ public String generateToken(String host) throws SpnegoEngineException {
181
185
// Rethrow any other exception.
182
186
if (ex .getMajor () == GSSException .BAD_MECH ) {
183
187
log .debug ("GSSException BAD_MECH, retry with Kerberos MECH" );
184
- tryKerberos = true ;
185
188
} else {
186
189
throw ex ;
187
190
}
188
191
189
192
}
190
- if (tryKerberos ) {
193
+ if (gssContext == null ) {
191
194
/* Kerberos v5 GSS-API mechanism defined in RFC 1964. */
192
195
log .debug ("Using Kerberos MECH {}" , KERBEROS_OID );
193
196
negotiationOid = new Oid (KERBEROS_OID );
@@ -270,14 +273,14 @@ private String getCanonicalHostname(String hostname) {
270
273
return canonicalHostname ;
271
274
}
272
275
273
- private CallbackHandler getUsernamePasswordHandler () {
276
+ private @ Nullable CallbackHandler getUsernamePasswordHandler () {
274
277
if (username == null ) {
275
278
return null ;
276
279
}
277
280
return new NamePasswordCallbackHandler (username , password );
278
281
}
279
282
280
- public Configuration getLoginConfiguration () {
283
+ public @ Nullable Configuration getLoginConfiguration () {
281
284
if (customLoginConfig != null && !customLoginConfig .isEmpty ()) {
282
285
return new Configuration () {
283
286
@ Override
0 commit comments