mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8187443: Forest Consolidation: Move files to unified layout
Reviewed-by: darcy, ihse
This commit is contained in:
parent
270fe13182
commit
3789983e89
56923 changed files with 3 additions and 15727 deletions
575
src/java.base/share/classes/java/net/Authenticator.java
Normal file
575
src/java.base/share/classes/java/net/Authenticator.java
Normal file
|
@ -0,0 +1,575 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package java.net;
|
||||
|
||||
import sun.net.www.protocol.http.AuthenticatorKeys;
|
||||
|
||||
/**
|
||||
* The class Authenticator represents an object that knows how to obtain
|
||||
* authentication for a network connection. Usually, it will do this
|
||||
* by prompting the user for information.
|
||||
* <p>
|
||||
* Applications use this class by overriding {@link
|
||||
* #getPasswordAuthentication()} in a sub-class. This method will
|
||||
* typically use the various getXXX() accessor methods to get information
|
||||
* about the entity requesting authentication. It must then acquire a
|
||||
* username and password either by interacting with the user or through
|
||||
* some other non-interactive means. The credentials are then returned
|
||||
* as a {@link PasswordAuthentication} return value.
|
||||
* <p>
|
||||
* An instance of this concrete sub-class is then registered
|
||||
* with the system by calling {@link #setDefault(Authenticator)}.
|
||||
* When authentication is required, the system will invoke one of the
|
||||
* requestPasswordAuthentication() methods which in turn will call the
|
||||
* getPasswordAuthentication() method of the registered object.
|
||||
* <p>
|
||||
* All methods that request authentication have a default implementation
|
||||
* that fails.
|
||||
*
|
||||
* @see java.net.Authenticator#setDefault(java.net.Authenticator)
|
||||
* @see java.net.Authenticator#getPasswordAuthentication()
|
||||
*
|
||||
* @author Bill Foote
|
||||
* @since 1.2
|
||||
*/
|
||||
|
||||
// There are no abstract methods, but to be useful the user must
|
||||
// subclass.
|
||||
public abstract
|
||||
class Authenticator {
|
||||
|
||||
// The system-wide authenticator object. See setDefault().
|
||||
private static volatile Authenticator theAuthenticator;
|
||||
|
||||
private String requestingHost;
|
||||
private InetAddress requestingSite;
|
||||
private int requestingPort;
|
||||
private String requestingProtocol;
|
||||
private String requestingPrompt;
|
||||
private String requestingScheme;
|
||||
private URL requestingURL;
|
||||
private RequestorType requestingAuthType;
|
||||
private final String key = AuthenticatorKeys.computeKey(this);
|
||||
|
||||
/**
|
||||
* The type of the entity requesting authentication.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public enum RequestorType {
|
||||
/**
|
||||
* Entity requesting authentication is a HTTP proxy server.
|
||||
*/
|
||||
PROXY,
|
||||
/**
|
||||
* Entity requesting authentication is a HTTP origin server.
|
||||
*/
|
||||
SERVER
|
||||
}
|
||||
|
||||
private void reset() {
|
||||
requestingHost = null;
|
||||
requestingSite = null;
|
||||
requestingPort = -1;
|
||||
requestingProtocol = null;
|
||||
requestingPrompt = null;
|
||||
requestingScheme = null;
|
||||
requestingURL = null;
|
||||
requestingAuthType = RequestorType.SERVER;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the authenticator that will be used by the networking code
|
||||
* when a proxy or an HTTP server asks for authentication.
|
||||
* <p>
|
||||
* First, if there is a security manager, its {@code checkPermission}
|
||||
* method is called with a
|
||||
* {@code NetPermission("setDefaultAuthenticator")} permission.
|
||||
* This may result in a java.lang.SecurityException.
|
||||
*
|
||||
* @param a The authenticator to be set. If a is {@code null} then
|
||||
* any previously set authenticator is removed.
|
||||
*
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its
|
||||
* {@code checkPermission} method doesn't allow
|
||||
* setting the default authenticator.
|
||||
*
|
||||
* @see SecurityManager#checkPermission
|
||||
* @see java.net.NetPermission
|
||||
*/
|
||||
public static synchronized void setDefault(Authenticator a) {
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
NetPermission setDefaultPermission
|
||||
= new NetPermission("setDefaultAuthenticator");
|
||||
sm.checkPermission(setDefaultPermission);
|
||||
}
|
||||
|
||||
theAuthenticator = a;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the default authenticator.
|
||||
* First, if there is a security manager, its {@code checkPermission}
|
||||
* method is called with a
|
||||
* {@code NetPermission("requestPasswordAuthentication")} permission.
|
||||
* This may result in a java.lang.SecurityException.
|
||||
* Then the default authenticator, if set, is returned.
|
||||
* Otherwise, {@code null} is returned.
|
||||
*
|
||||
* @return The default authenticator, if set, {@code null} otherwise.
|
||||
*
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its
|
||||
* {@code checkPermission} method doesn't allow
|
||||
* requesting password authentication.
|
||||
* @since 9
|
||||
* @see SecurityManager#checkPermission
|
||||
* @see java.net.NetPermission
|
||||
*/
|
||||
public static Authenticator getDefault() {
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
NetPermission requestPermission
|
||||
= new NetPermission("requestPasswordAuthentication");
|
||||
sm.checkPermission(requestPermission);
|
||||
}
|
||||
return theAuthenticator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask the authenticator that has been registered with the system
|
||||
* for a password.
|
||||
* <p>
|
||||
* First, if there is a security manager, its {@code checkPermission}
|
||||
* method is called with a
|
||||
* {@code NetPermission("requestPasswordAuthentication")} permission.
|
||||
* This may result in a java.lang.SecurityException.
|
||||
*
|
||||
* @param addr The InetAddress of the site requesting authorization,
|
||||
* or null if not known.
|
||||
* @param port the port for the requested connection
|
||||
* @param protocol The protocol that's requesting the connection
|
||||
* ({@link java.net.Authenticator#getRequestingProtocol()})
|
||||
* @param prompt A prompt string for the user
|
||||
* @param scheme The authentication scheme
|
||||
*
|
||||
* @return The username/password, or null if one can't be gotten.
|
||||
*
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its
|
||||
* {@code checkPermission} method doesn't allow
|
||||
* the password authentication request.
|
||||
*
|
||||
* @see SecurityManager#checkPermission
|
||||
* @see java.net.NetPermission
|
||||
*/
|
||||
public static PasswordAuthentication requestPasswordAuthentication(
|
||||
InetAddress addr,
|
||||
int port,
|
||||
String protocol,
|
||||
String prompt,
|
||||
String scheme) {
|
||||
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
NetPermission requestPermission
|
||||
= new NetPermission("requestPasswordAuthentication");
|
||||
sm.checkPermission(requestPermission);
|
||||
}
|
||||
|
||||
Authenticator a = theAuthenticator;
|
||||
if (a == null) {
|
||||
return null;
|
||||
} else {
|
||||
synchronized(a) {
|
||||
a.reset();
|
||||
a.requestingSite = addr;
|
||||
a.requestingPort = port;
|
||||
a.requestingProtocol = protocol;
|
||||
a.requestingPrompt = prompt;
|
||||
a.requestingScheme = scheme;
|
||||
return a.getPasswordAuthentication();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask the authenticator that has been registered with the system
|
||||
* for a password. This is the preferred method for requesting a password
|
||||
* because the hostname can be provided in cases where the InetAddress
|
||||
* is not available.
|
||||
* <p>
|
||||
* First, if there is a security manager, its {@code checkPermission}
|
||||
* method is called with a
|
||||
* {@code NetPermission("requestPasswordAuthentication")} permission.
|
||||
* This may result in a java.lang.SecurityException.
|
||||
*
|
||||
* @param host The hostname of the site requesting authentication.
|
||||
* @param addr The InetAddress of the site requesting authentication,
|
||||
* or null if not known.
|
||||
* @param port the port for the requested connection.
|
||||
* @param protocol The protocol that's requesting the connection
|
||||
* ({@link java.net.Authenticator#getRequestingProtocol()})
|
||||
* @param prompt A prompt string for the user which identifies the authentication realm.
|
||||
* @param scheme The authentication scheme
|
||||
*
|
||||
* @return The username/password, or null if one can't be gotten.
|
||||
*
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its
|
||||
* {@code checkPermission} method doesn't allow
|
||||
* the password authentication request.
|
||||
*
|
||||
* @see SecurityManager#checkPermission
|
||||
* @see java.net.NetPermission
|
||||
* @since 1.4
|
||||
*/
|
||||
public static PasswordAuthentication requestPasswordAuthentication(
|
||||
String host,
|
||||
InetAddress addr,
|
||||
int port,
|
||||
String protocol,
|
||||
String prompt,
|
||||
String scheme) {
|
||||
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
NetPermission requestPermission
|
||||
= new NetPermission("requestPasswordAuthentication");
|
||||
sm.checkPermission(requestPermission);
|
||||
}
|
||||
|
||||
Authenticator a = theAuthenticator;
|
||||
if (a == null) {
|
||||
return null;
|
||||
} else {
|
||||
synchronized(a) {
|
||||
a.reset();
|
||||
a.requestingHost = host;
|
||||
a.requestingSite = addr;
|
||||
a.requestingPort = port;
|
||||
a.requestingProtocol = protocol;
|
||||
a.requestingPrompt = prompt;
|
||||
a.requestingScheme = scheme;
|
||||
return a.getPasswordAuthentication();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask the authenticator that has been registered with the system
|
||||
* for a password.
|
||||
* <p>
|
||||
* First, if there is a security manager, its {@code checkPermission}
|
||||
* method is called with a
|
||||
* {@code NetPermission("requestPasswordAuthentication")} permission.
|
||||
* This may result in a java.lang.SecurityException.
|
||||
*
|
||||
* @param host The hostname of the site requesting authentication.
|
||||
* @param addr The InetAddress of the site requesting authorization,
|
||||
* or null if not known.
|
||||
* @param port the port for the requested connection
|
||||
* @param protocol The protocol that's requesting the connection
|
||||
* ({@link java.net.Authenticator#getRequestingProtocol()})
|
||||
* @param prompt A prompt string for the user
|
||||
* @param scheme The authentication scheme
|
||||
* @param url The requesting URL that caused the authentication
|
||||
* @param reqType The type (server or proxy) of the entity requesting
|
||||
* authentication.
|
||||
*
|
||||
* @return The username/password, or null if one can't be gotten.
|
||||
*
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its
|
||||
* {@code checkPermission} method doesn't allow
|
||||
* the password authentication request.
|
||||
*
|
||||
* @see SecurityManager#checkPermission
|
||||
* @see java.net.NetPermission
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static PasswordAuthentication requestPasswordAuthentication(
|
||||
String host,
|
||||
InetAddress addr,
|
||||
int port,
|
||||
String protocol,
|
||||
String prompt,
|
||||
String scheme,
|
||||
URL url,
|
||||
RequestorType reqType) {
|
||||
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
NetPermission requestPermission
|
||||
= new NetPermission("requestPasswordAuthentication");
|
||||
sm.checkPermission(requestPermission);
|
||||
}
|
||||
|
||||
Authenticator a = theAuthenticator;
|
||||
if (a == null) {
|
||||
return null;
|
||||
} else {
|
||||
synchronized(a) {
|
||||
a.reset();
|
||||
a.requestingHost = host;
|
||||
a.requestingSite = addr;
|
||||
a.requestingPort = port;
|
||||
a.requestingProtocol = protocol;
|
||||
a.requestingPrompt = prompt;
|
||||
a.requestingScheme = scheme;
|
||||
a.requestingURL = url;
|
||||
a.requestingAuthType = reqType;
|
||||
return a.getPasswordAuthentication();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask the given {@code authenticator} for a password. If the given
|
||||
* {@code authenticator} is null, the authenticator, if any, that has been
|
||||
* registered with the system using {@link #setDefault(java.net.Authenticator)
|
||||
* setDefault} is used.
|
||||
* <p>
|
||||
* First, if there is a security manager, its {@code checkPermission}
|
||||
* method is called with a
|
||||
* {@code NetPermission("requestPasswordAuthentication")} permission.
|
||||
* This may result in a java.lang.SecurityException.
|
||||
*
|
||||
* @param authenticator the authenticator, or {@code null}.
|
||||
* @param host The hostname of the site requesting authentication.
|
||||
* @param addr The InetAddress of the site requesting authorization,
|
||||
* or null if not known.
|
||||
* @param port the port for the requested connection
|
||||
* @param protocol The protocol that's requesting the connection
|
||||
* ({@link java.net.Authenticator#getRequestingProtocol()})
|
||||
* @param prompt A prompt string for the user
|
||||
* @param scheme The authentication scheme
|
||||
* @param url The requesting URL that caused the authentication
|
||||
* @param reqType The type (server or proxy) of the entity requesting
|
||||
* authentication.
|
||||
*
|
||||
* @return The username/password, or {@code null} if one can't be gotten.
|
||||
*
|
||||
* @throws SecurityException
|
||||
* if a security manager exists and its
|
||||
* {@code checkPermission} method doesn't allow
|
||||
* the password authentication request.
|
||||
*
|
||||
* @see SecurityManager#checkPermission
|
||||
* @see java.net.NetPermission
|
||||
*
|
||||
* @since 9
|
||||
*/
|
||||
public static PasswordAuthentication requestPasswordAuthentication(
|
||||
Authenticator authenticator,
|
||||
String host,
|
||||
InetAddress addr,
|
||||
int port,
|
||||
String protocol,
|
||||
String prompt,
|
||||
String scheme,
|
||||
URL url,
|
||||
RequestorType reqType) {
|
||||
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
NetPermission requestPermission
|
||||
= new NetPermission("requestPasswordAuthentication");
|
||||
sm.checkPermission(requestPermission);
|
||||
}
|
||||
|
||||
Authenticator a = authenticator == null ? theAuthenticator : authenticator;
|
||||
if (a == null) {
|
||||
return null;
|
||||
} else {
|
||||
return a.requestPasswordAuthenticationInstance(host,
|
||||
addr,
|
||||
port,
|
||||
protocol,
|
||||
prompt,
|
||||
scheme,
|
||||
url,
|
||||
reqType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask this authenticator for a password.
|
||||
*
|
||||
* @param host The hostname of the site requesting authentication.
|
||||
* @param addr The InetAddress of the site requesting authorization,
|
||||
* or null if not known.
|
||||
* @param port the port for the requested connection
|
||||
* @param protocol The protocol that's requesting the connection
|
||||
* ({@link java.net.Authenticator#getRequestingProtocol()})
|
||||
* @param prompt A prompt string for the user
|
||||
* @param scheme The authentication scheme
|
||||
* @param url The requesting URL that caused the authentication
|
||||
* @param reqType The type (server or proxy) of the entity requesting
|
||||
* authentication.
|
||||
*
|
||||
* @return The username/password, or null if one can't be gotten
|
||||
*
|
||||
* @since 9
|
||||
*/
|
||||
public PasswordAuthentication
|
||||
requestPasswordAuthenticationInstance(String host,
|
||||
InetAddress addr,
|
||||
int port,
|
||||
String protocol,
|
||||
String prompt,
|
||||
String scheme,
|
||||
URL url,
|
||||
RequestorType reqType) {
|
||||
synchronized (this) {
|
||||
this.reset();
|
||||
this.requestingHost = host;
|
||||
this.requestingSite = addr;
|
||||
this.requestingPort = port;
|
||||
this.requestingProtocol = protocol;
|
||||
this.requestingPrompt = prompt;
|
||||
this.requestingScheme = scheme;
|
||||
this.requestingURL = url;
|
||||
this.requestingAuthType = reqType;
|
||||
return this.getPasswordAuthentication();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@code hostname} of the
|
||||
* site or proxy requesting authentication, or {@code null}
|
||||
* if not available.
|
||||
*
|
||||
* @return the hostname of the connection requiring authentication, or null
|
||||
* if it's not available.
|
||||
* @since 1.4
|
||||
*/
|
||||
protected final String getRequestingHost() {
|
||||
return requestingHost;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@code InetAddress} of the
|
||||
* site requesting authorization, or {@code null}
|
||||
* if not available.
|
||||
*
|
||||
* @return the InetAddress of the site requesting authorization, or null
|
||||
* if it's not available.
|
||||
*/
|
||||
protected final InetAddress getRequestingSite() {
|
||||
return requestingSite;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the port number for the requested connection.
|
||||
* @return an {@code int} indicating the
|
||||
* port for the requested connection.
|
||||
*/
|
||||
protected final int getRequestingPort() {
|
||||
return requestingPort;
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the protocol that's requesting the connection. Often this
|
||||
* will be based on a URL, but in a future JDK it could be, for
|
||||
* example, "SOCKS" for a password-protected SOCKS5 firewall.
|
||||
*
|
||||
* @return the protocol, optionally followed by "/version", where
|
||||
* version is a version number.
|
||||
*
|
||||
* @see java.net.URL#getProtocol()
|
||||
*/
|
||||
protected final String getRequestingProtocol() {
|
||||
return requestingProtocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the prompt string given by the requestor.
|
||||
*
|
||||
* @return the prompt string given by the requestor (realm for
|
||||
* http requests)
|
||||
*/
|
||||
protected final String getRequestingPrompt() {
|
||||
return requestingPrompt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the scheme of the requestor (the HTTP scheme
|
||||
* for an HTTP firewall, for example).
|
||||
*
|
||||
* @return the scheme of the requestor
|
||||
*
|
||||
*/
|
||||
protected final String getRequestingScheme() {
|
||||
return requestingScheme;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when password authorization is needed. Subclasses should
|
||||
* override the default implementation, which returns null.
|
||||
* @return The PasswordAuthentication collected from the
|
||||
* user, or null if none is provided.
|
||||
*/
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the URL that resulted in this
|
||||
* request for authentication.
|
||||
*
|
||||
* @since 1.5
|
||||
*
|
||||
* @return the requesting URL
|
||||
*
|
||||
*/
|
||||
protected URL getRequestingURL () {
|
||||
return requestingURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the requestor is a Proxy or a Server.
|
||||
*
|
||||
* @since 1.5
|
||||
*
|
||||
* @return the authentication type of the requestor
|
||||
*
|
||||
*/
|
||||
protected RequestorType getRequestorType () {
|
||||
return requestingAuthType;
|
||||
}
|
||||
|
||||
static String getKey(Authenticator a) {
|
||||
return a.key;
|
||||
}
|
||||
static {
|
||||
AuthenticatorKeys.setAuthenticatorKeyAccess(Authenticator::getKey);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue