⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sasl.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   * a list of realms to choose from, and by using a {@link RealmCallback} if   * the realm must be entered.   * @return a possibly <code>null</code> {@link SaslClient} created using the   * parameters supplied. If <code>null</code>, the method could not find a   * {@link SaslClientFactory} that will produce one.   * @throws SaslException if a {@link SaslClient} cannot be created because   * of an error.   */  public static SaslClient createSaslClient(String[] mechanisms,                                            String authorizationID,                                            String protocol,                                            String serverName, Map props,                                            CallbackHandler cbh)    throws SaslException  {    if (mechanisms == null)      {        return null;      }    Provider[] providers = Security.getProviders();    if (providers == null || providers.length == 0)      {        return null;      }    SaslClient result = null;    SaslClientFactory factory = null;    String m, clazz = null, upper, alias;    int j;    Provider p;    for (int i = 0; i < mechanisms.length; i++)      {        m = mechanisms[i];        if (m == null)          continue;        for (j = 0; j < providers.length; j++)          {            p = providers[j];            if (p != null)              {                // try the name as is                clazz = p.getProperty(CLIENT_FACTORY_SVC + m);                if (clazz == null) // try all uppercase                  {                    upper = m.toUpperCase();                    clazz = p.getProperty(CLIENT_FACTORY_SVC + upper);                    if (clazz == null) // try if it's an alias                      {                        alias = p.getProperty(ALIAS + CLIENT_FACTORY_SVC + m);                        if (alias == null) // try all-uppercase alias name                          {                            alias = p.getProperty(ALIAS + CLIENT_FACTORY_SVC + upper);                            if (alias == null) // spit the dummy                              continue;                          }                        clazz = p.getProperty(CLIENT_FACTORY_SVC + alias);                      }                  }                if (clazz == null)                  continue;                else                  clazz = clazz.trim();              }            try              {                result = null;                factory = (SaslClientFactory) Class.forName(clazz).newInstance();                result = factory.createSaslClient(mechanisms, authorizationID,                                                  protocol, serverName, props, cbh);              }            catch (ClassCastException ignored) // ignore instantiation exceptions              {              }            catch (ClassNotFoundException ignored)              {              }            catch (InstantiationException ignored)              {              }            catch (IllegalAccessException ignored)              {              }            if (result != null)              return result;          }      }    return null;  }  /**   * Gets an enumeration of known factories for producing a {@link SaslClient}   * instance. This method uses the same sources for locating factories as   * <code>createSaslClient()</code>.   *   * @return a non-null {@link Enumeration} of known factories for producing a   * {@link SaslClient} instance.   * @see #createSaslClient(String[],String,String,String,Map,CallbackHandler)   */  public static Enumeration getSaslClientFactories()  {    Vector result = new Vector();    HashSet names = new HashSet();    Provider[] providers = Security.getProviders();    Iterator it;    if (providers != null)      {        Provider p;        String key;        for (int i = 0; i < providers.length; i++)          {            p = providers[i];            for (it = p.keySet().iterator(); it.hasNext(); )              {                key = (String) it.next();                // add key's binding (a) it is a class of a client factory,                // and (b) the key does not include blanks                if (key.startsWith(CLIENT_FACTORY_SVC) && key.indexOf(" ") == -1)                  {                    names.add(p.getProperty(key));                    break;                  }              }          }      }    // we have the factory class names in names; instantiate and enumerate    String c;    for (it = names.iterator(); it.hasNext(); )      {        c = (String) it.next();        try          {            SaslClientFactory f = (SaslClientFactory) Class.forName(c).newInstance();            if (f != null)              result.add(f);          } catch (ClassCastException ignored) { // ignore instantiation exceptions          } catch (ClassNotFoundException ignored) {          } catch (InstantiationException ignored) {          } catch (IllegalAccessException ignored) {          }      }    return result.elements();  }  /**   * Creates a {@link SaslServer} for the specified mechanism.   *   * <p>This method uses the JCA Security Provider Framework, described in the   * "Java Cryptography Architecture API Specification &amp; Reference", for   * locating and selecting a SaslServer implementation.</p>   *   * <p>First, it obtains an ordered list of {@link SaslServerFactory}   * instances from the registered security providers for the   * <code>"SaslServerFactory"</code> service and the specified mechanism. It   * then invokes <code>createSaslServer()</code> on each factory instance on   * the list until one produces a non-null {@link SaslServer} instance. It   * returns the non-null {@link SaslServer} instance, or <code>null</code> if   * the search fails to produce a non-null {@link SaslServer} instance.</p>   *   * <p>A security provider for {@link SaslServerFactory} registers with the   * JCA Security Provider Framework keys of the form:</p>   *   * <pre>   *    SaslServerFactory.mechanism_name   * </pre>   *   * <p>and values that are class names of implementations of {@link   * SaslServerFactory}.</p>   *   * <p>For example, a provider that contains a factory class,   * <code>com.wiz.sasl.digest.ServerFactory</code>, that supports the   * <code>"DIGEST-MD5"</code> mechanism would register the following entry   * with the JCA:</p>   *   * <pre>   *    SaslServerFactory.DIGEST-MD5     com.wiz.sasl.digest.ServerFactory   * </pre>   *   * <p>See the "Java Cryptography Architecture API Specification &amp;   * Reference" for information about how to install and configure security   * service providers.</p>   *   * @param mechanism the non-null mechanism name. It must be an   * IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").   * @param protocol the non-null string name of the protocol for which the   * authentication is being performed (e.g. "ldap").   * @param serverName the non-null fully qualified host name of the server.   * @param props the possibly <code>null</code> set of properties used to   * select the SASL mechanism and to configure the authentication exchange of   * the selected mechanism. For example, if props contains the {@link   * Sasl#POLICY_NOPLAINTEXT} property with the value <code>"true"</code>, then   * the selected SASL mechanism must not be susceptible to simple plain   * passive attacks. In addition to the standard properties declared in this   * class, other, possibly mechanism-specific, properties can be included.   * Properties not relevant to the selected mechanism are ignored.   * @param cbh the possibly <code>null</code> callback handler to used by the   * SASL mechanisms to get further information from the application/library to   * complete the authentication. For example, a SASL mechanism might require   * the authentication ID, password and realm from the caller. The   * authentication ID is requested by using a   * {@link javax.security.auth.callback.NameCallback}. The password is   * requested by using a {@link javax.security.auth.callback.PasswordCallback}.   * The realm is requested by using a {@link RealmChoiceCallback} if there is   * a list of realms to choose from, and by using a {@link RealmCallback} if   * the realm must be entered.   * @return a possibly <code>null</code> {@link SaslServer} created using the   * parameters supplied. If <code>null</code>, the method cannot find a   * {@link SaslServerFactory} instance that will produce one.   * @throws SaslException if a {@link SaslServer} instance cannot be created   * because of an error.   */  public static SaslServer createSaslServer(String mechanism, String protocol,                                            String serverName,                                            Map props, CallbackHandler cbh)    throws SaslException  {    if (mechanism == null)      return null;    Provider[] providers = Security.getProviders();    if (providers == null || providers.length == 0)      return null;    SaslServer result = null;    SaslServerFactory factory = null;    String clazz = null, upper, alias = null;    int j;    Provider p;    for (j = 0; j < providers.length; j++)      {        p = providers[j];        if (p != null)          {            // try the name as is            clazz = p.getProperty(SERVER_FACTORY_SVC + mechanism);            if (clazz == null) // try all uppercase              {                upper = mechanism.toUpperCase();                clazz = p.getProperty(SERVER_FACTORY_SVC + upper);                if (clazz == null) // try if it's an alias                  {                    alias = p.getProperty(ALIAS + SERVER_FACTORY_SVC + mechanism);                    if (alias == null) // try all-uppercase alias name                      {                        alias = p.getProperty(ALIAS + SERVER_FACTORY_SVC + upper);                        if (alias == null) // spit the dummy                          continue;                      }                  }                clazz = p.getProperty(SERVER_FACTORY_SVC + alias);              }          }        if (clazz == null)          continue;        else          clazz = clazz.trim();        try          {            result = null;            factory = (SaslServerFactory) Class.forName(clazz).newInstance();            result =              factory.createSaslServer(mechanism, protocol, serverName, props, cbh);          }        catch (ClassCastException ignored) // ignore instantiation exceptions          {          }        catch (ClassNotFoundException ignored)          {          }        catch (InstantiationException ignored)          {          }        catch (IllegalAccessException ignored)          {          }        if (result != null)          return result;      }    return null;  }  /**   * Gets an enumeration of known factories for producing a {@link SaslServer}   * instance. This method uses the same sources for locating factories as   * <code>createSaslServer()</code>.   *   * @return a non-null {@link Enumeration} of known factories for producing a   * {@link SaslServer} instance.   * @see #createSaslServer(String,String,String,Map,CallbackHandler)   */  public static Enumeration getSaslServerFactories()  {    Vector result = new Vector();    HashSet names = new HashSet();    Provider[] providers = Security.getProviders();    Iterator it;    if (providers != null)      {        Provider p;        String key;        for (int i = 0; i < providers.length; i++)          {            p = providers[i];            for (it = p.keySet().iterator(); it.hasNext(); )              {                key = (String) it.next();                // add key's binding (a) it is a class of a server factory,                // and (b) the key does not include blanks                if (key.startsWith(SERVER_FACTORY_SVC) && key.indexOf(" ") == -1)                  {                    names.add(p.getProperty(key));                    break;                  }              }          }      }    // we have the factory class names in names; instantiate and enumerate    String c;    for (it = names.iterator(); it.hasNext(); )      {        c = (String) it.next();        try          {            SaslServerFactory f = (SaslServerFactory) Class.forName(c).newInstance();            if (f != null)              result.add(f);          }        catch (ClassCastException ignored) // ignore instantiation exceptions          {          }        catch (ClassNotFoundException ignored)          {          }        catch (InstantiationException ignored)          {          }        catch (IllegalAccessException ignored)          {          }      }    return result.elements();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -