1/* 2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package sun.net.www.protocol.http; 27 28import java.net.Authenticator; 29import java.util.concurrent.atomic.AtomicLong; 30 31/** 32 * A class used to tie a key to an authenticator instance. 33 */ 34public final class AuthenticatorKeys { 35 private AuthenticatorKeys() { 36 throw new InternalError("Trying to instantiate static class"); 37 } 38 39 public static final String DEFAULT = "default"; 40 private static final AtomicLong IDS = new AtomicLong(); 41 42 public static String computeKey(Authenticator a) { 43 return System.identityHashCode(a) + "-" + IDS.incrementAndGet() 44 + "@" + a.getClass().getName(); 45 } 46 47 /** 48 * Returns a key for the given authenticator. 49 * 50 * @param authenticator The authenticator; {@code null} should be 51 * passed when the {@linkplain 52 * Authenticator#setDefault(java.net.Authenticator) default} 53 * authenticator is meant. 54 * @return A key for the given authenticator, {@link #DEFAULT} for 55 * {@code null}. 56 */ 57 public static String getKey(Authenticator authenticator) { 58 if (authenticator == null) { 59 return DEFAULT; 60 } 61 return authenticatorKeyAccess.getKey(authenticator); 62 } 63 64 @FunctionalInterface 65 public interface AuthenticatorKeyAccess { 66 public String getKey(Authenticator a); 67 } 68 69 private static AuthenticatorKeyAccess authenticatorKeyAccess; 70 public static void setAuthenticatorKeyAccess(AuthenticatorKeyAccess access) { 71 if (authenticatorKeyAccess == null && access != null) { 72 authenticatorKeyAccess = access; 73 } 74 } 75 76} 77