001: /*
002: * Copyright 2003-2004 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package java.security;
027:
028: import javax.security.auth.Subject;
029: import javax.security.auth.login.LoginException;
030: import javax.security.auth.callback.CallbackHandler;
031:
032: /**
033: * This class defines login and logout methods for a provider.
034: *
035: * <p> While callers may invoke <code>login</code> directly,
036: * the provider may also invoke <code>login</code> on behalf of callers
037: * if it determines that a login must be performed
038: * prior to certain operations.
039: *
040: * @version 1.10, 05/05/07
041: * @since 1.5
042: */
043: public abstract class AuthProvider extends Provider {
044:
045: /**
046: * Constructs a provider with the specified name, version number,
047: * and information.
048: *
049: * @param name the provider name.
050: * @param version the provider version number.
051: * @param info a description of the provider and its services.
052: */
053: protected AuthProvider(String name, double version, String info) {
054: super (name, version, info);
055: }
056:
057: /**
058: * Log in to this provider.
059: *
060: * <p> The provider relies on a <code>CallbackHandler</code>
061: * to obtain authentication information from the caller
062: * (a PIN, for example). If the caller passes a <code>null</code>
063: * handler to this method, the provider uses the handler set in the
064: * <code>setCallbackHandler</code> method.
065: * If no handler was set in that method, the provider queries the
066: * <i>auth.login.defaultCallbackHandler</i> security property
067: * for the fully qualified class name of a default handler implementation.
068: * If the security property is not set,
069: * the provider is assumed to have alternative means
070: * for obtaining authentication information.
071: *
072: * @param subject the <code>Subject</code> which may contain
073: * principals/credentials used for authentication,
074: * or may be populated with additional principals/credentials
075: * after successful authentication has completed.
076: * This parameter may be <code>null</code>.
077: * @param handler the <code>CallbackHandler</code> used by
078: * this provider to obtain authentication information
079: * from the caller, which may be <code>null</code>
080: *
081: * @exception LoginException if the login operation fails
082: * @exception SecurityException if the caller does not pass a
083: * security check for
084: * <code>SecurityPermission("authProvider.<i>name</i>")</code>,
085: * where <i>name</i> is the value returned by
086: * this provider's <code>getName</code> method
087: */
088: public abstract void login(Subject subject, CallbackHandler handler)
089: throws LoginException;
090:
091: /**
092: * Log out from this provider.
093: *
094: * @exception LoginException if the logout operation fails
095: * @exception SecurityException if the caller does not pass a
096: * security check for
097: * <code>SecurityPermission("authProvider.<i>name</i>")</code>,
098: * where <i>name</i> is the value returned by
099: * this provider's <code>getName</code> method
100: */
101: public abstract void logout() throws LoginException;
102:
103: /**
104: * Set a <code>CallbackHandler</code>.
105: *
106: * <p> The provider uses this handler if one is not passed to the
107: * <code>login</code> method. The provider also uses this handler
108: * if it invokes <code>login</code> on behalf of callers.
109: * In either case if a handler is not set via this method,
110: * the provider queries the
111: * <i>auth.login.defaultCallbackHandler</i> security property
112: * for the fully qualified class name of a default handler implementation.
113: * If the security property is not set,
114: * the provider is assumed to have alternative means
115: * for obtaining authentication information.
116: *
117: * @param handler a <code>CallbackHandler</code> for obtaining
118: * authentication information, which may be <code>null</code>
119: *
120: * @exception SecurityException if the caller does not pass a
121: * security check for
122: * <code>SecurityPermission("authProvider.<i>name</i>")</code>,
123: * where <i>name</i> is the value returned by
124: * this provider's <code>getName</code> method
125: */
126: public abstract void setCallbackHandler(CallbackHandler handler);
127: }
|