@Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (Callback callback : callbacks) { if (callback instanceof PasswordCallback) { ((PasswordCallback) callback).setPassword(credential.toCharArray()); } else if (callback instanceof NameCallback) { ((NameCallback) callback).setName(name); } else if (callback instanceof RealmCallback) { ((RealmCallback) callback).setText(realm); } else if (callback instanceof CredentialCallback) { CredentialCallback cb = (CredentialCallback) callback; Password password; switch (cb.getAlgorithm()) { case ALGORITHM_CLEAR: password = ClearPassword.createRaw(ALGORITHM_CLEAR, credential.toCharArray()); break; case ALGORITHM_DIGEST_MD5: byte[] decodedDigest = ByteIterator.ofBytes(credential.getBytes(StandardCharsets.UTF_8)).hexDecode().drain(); password = DigestPassword.createRaw(ALGORITHM_DIGEST_MD5, name, realm, decodedDigest); break; default: continue; } cb.setCredential(cb.getCredentialType().cast(new PasswordCredential(password))); } } }