Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Учебное руководство по Аутентификации JAAS


Служба Аутентификации и авторизации Java (JAAS) была представлена как дополнительный пакет Java 2 SDK, Standard Edition (J2SDK), v 1.3. JAAS был интегрирован в Java Standard Edition Комплект разработчика, запускающийся с J2SDK 1.4.

JAAS может использоваться в двух целях:

Этот раздел обеспечивает основное учебное руководство для компонента аутентификации. Компонент авторизации будет описан в Учебном руководстве по Авторизации JAAS.

Аутентификация JAAS выполняется сменным способом. Это разрешает приложениям Java оставаться независимыми от базовых технологий аутентификации. Новые или обновленные технологии могут быть включены, не требуя модификаций к приложению непосредственно. Реализация для определенной технологии аутентификации использоваться определяется во времени выполнения. Реализация определяется в конфигурационном файле входа в систему. Технология аутентификации, используемая для этого учебного руководства, является очень основной, только гарантируя, что пользователь определяет определенное имя и пароль.

Остальная часть этого учебного руководства состоит из следующих разделов:

  1. Учебный Код Аутентификации
  2. Конфигурация Входа в систему
  3. Выполнение Кода
  4. Выполнение Кода с Менеджером безопасности

Если Вы хотите сначала видеть учебный код в действии, можно пропустить непосредственно к Выполнению Кода и затем вернуться к другим разделам, чтобы узнать о кодировании и деталях конфигурационного файла.

Учебный Код Аутентификации

Код для этого учебного руководства состоит из трех файлов:

SampleAcn.java

Наш учебный код программы аутентификации содержится в единственном исходном файле, SampleAcn.java. Тот файл содержит два класса:

Класс SampleAcn

main метод SampleAcn, class выполняет аутентификацию и затем сообщает действительно ли аутентификация, за которой следуют.

Код для того, чтобы аутентифицировать пользователя очень прост, состоя только из двух шагов:

  1. Инстанцируйте LoginContext.
  2. Вызовите LoginContext login метод.

Сначала абсолютный код показывают, сопровождается полным списком SampleAcn class, завершитесь с оператором импорта, которого он требует и обработка ошибок.

Инстанцирование LoginContext

Чтобы аутентифицировать пользователя, Вы сначала нуждаетесь в a javax.security.auth.login.LoginContext. Вот основной способ инстанцировать LoginContext:

import javax.security.auth.login.*;
. . .
LoginContext lc =
    new LoginContext(<config file entry name>,
           <CallbackHandler to be used for user interaction>);
и вот особенный метод, наш учебный код делает инстанцирование:
import javax.security.auth.login.*;
. . .
LoginContext lc =
    new LoginContext("Sample",
          new MyCallbackHandler());

Параметрами является следующее:

  1. Имя записи в конфигурационном файле входа в систему JAAS

    Это - имя для LoginContext, чтобы использовать, чтобы искать запись для этого приложения в конфигурационном файле входа в систему JAAS, описанном здесь. Такая запись определяет class, которые реализуют требуемую базовую технологию (и) аутентификации. class должен реализовать интерфейс LoginModule, который находится в javax.security.auth.spi пакет.

    В нашем примере кода мы используем SampleLoginModule предоставленный этим учебным руководством. SampleLoginModule выполняет аутентификацию, гарантируя, что пользователь вводит определенное имя и пароль.

    У записи в конфигурационном файле входа в систему, который мы используем для этого учебного руководства (см. sample_jaas.config) есть имя "Выборка", так, чтобы было имя, которое мы определяем как первый параметр конструктору LoginContext.

  2. Экземпляр CallbackHandler.

    Когда LoginModule должен связаться с пользователем, например чтобы попросить имя пользователя и пароль, он не делает так непосредственно. Это - то, потому что есть различные способы связаться с пользователем, и это является требуемым для LoginModules, чтобы остаться независимым от различных типов взаимодействия с пользователем. Скорее LoginModule вызывает a javax.security.auth.callback.CallbackHandler выполнить взаимодействие с пользователем и получить требуемую информацию, такую как имя пользователя и пароль.

    Экземпляр определенного CallbackHandler, который будет использоваться, определяется как второй параметр конструктору LoginContext. LoginContext вперед, что экземпляр к базовому LoginModule (в нашем случае SampleLoginModule). Приложение обычно обеспечивает свою собственную реализацию CallbackHandler. Двум простым CallbackHandlers, TextCallbackHandler и DialogCallbackHandler, предоставляют в com.sun.security.auth.callback пакет как демонстрационные реализации. Для этого учебного руководства мы могли использовать TextCallbackHandler, который информация о выводах к и ввод чтений из командной строки. Однако, мы вместо этого демонстрируем более типичный случай приложения, обеспечивающего его собственную реализацию CallbackHandler, описанную в Классе MyCallbackHandler.

Вызов LoginContext login Метод

Как только у нас есть LoginContext lc, мы можем вызвать login метод, чтобы выполнить процесс аутентификации:

lc.login();

LoginContext инстанцирует нового пустого javax.security.auth.Subject объект (который представляет пользователя или аутентифицируемую службу). LoginContext создает сконфигурированный LoginModule (в нашем случае SampleLoginModule) и инициализирует это с этим новым Предметом и MyCallbackHandler.

LoginContext login метод тогда вызывает методы в SampleLoginModule, чтобы выполнить вход в систему и аутентификацию. SampleLoginModule использует MyCallbackHandler, чтобы получить имя пользователя и пароль. Затем SampleLoginModule проверит, что имя и пароль - те, это ожидает.

Если аутентификация успешна, SampleLoginModule заполняет Предмет с Принципалом, представляющим пользователя. Принципал места SampleLoginModule в Предмете являются экземпляром SamplePrincipal, который является демонстрационным class, реализовывая java.security. Основной интерфейс.

См. Предметы, Принципалы, Аутентификацию, и Учетные данные для информации на этих условиях.

Вызывающее приложение может впоследствии получить аутентифицируемый Предмет, вызывая LoginContext getSubject метод, хотя делая так не необходим для этого учебного руководства.

Полное SampleAcn Код класса

Теперь, когда Вы видели абсолютный код, требуемый аутентифицировать пользователя, мы можем соединить все это в полный class в SampleAcn.java, который включает соответствующие операторы импорта и обработку ошибок:

package sample;

import javax.security.auth.login.*;
// . . . other import statements needed by MyCallbackHandler . . .

/**
 * This Sample application attempts to authenticate a user
 * and reports whether or not the authentication was
 * successful.
 */
public class SampleAcn {

   /**
    * Attempt to authenticate the user.
    *
    * @param args input arguments for this application.
    * These are ignored.
    */
    public static void main(String[] args) {

      // Obtain a LoginContext, needed for authentication.
      // Tell it to use the LoginModule implementation
      // specified by the entry named "Sample" in the
      // JAAS login configuration file and to also use the
      // specified CallbackHandler.
      LoginContext lc = null;
      try {
          lc = new LoginContext("Sample",
                          new MyCallbackHandler());
      } catch (LoginException le) {
          System.err.println("Cannot create LoginContext. "
              + le.getMessage());
          System.exit(-1);
      } catch (SecurityException se) {
          System.err.println("Cannot create LoginContext. "
              + se.getMessage());
          System.exit(-1);
      }

      // the user has 3 attempts to authenticate successfully
      int i;
      for (i = 0; i < 3; i++) {
          try {

              // attempt authentication
              lc.login();

              // if we return with no exception,
              // authentication succeeded
              break;

          } catch (LoginException le) {

              System.err.println("Authentication failed:");
              System.err.println("  " + le.getMessage());
              try {
                  Thread.currentThread().sleep(3000);
              } catch (Exception e) {
                  // ignore
              }

          }
      }

      // did they fail three times?
      if (i == 3) {
          System.out.println("Sorry");
          System.exit(-1);
      }

      System.out.println("Authentication succeeded!");

    }
}

Класс MyCallbackHandler

В некоторых случаях LoginModule должен связаться с пользователем, чтобы получить информацию об аутентификации. LoginModules используют a javax.security.auth.callback.CallbackHandler с этой целью. Приложение может или использовать одну из демонстрационных реализаций, обеспеченных в com.sun.security.auth.callback пакет или, более обычно, запись реализация CallbackHandler. Приложение передает CallbackHandler как параметр инстанцированию LoginContext. LoginContext вперед CallbackHandler непосредственно к базовому LoginModules.

Учебный пример кода предоставляет свою собственную реализацию CallbackHandler, MyCallbackHandler class в SampleAcn.java.

CallbackHandler является интерфейсом с одним методом, чтобы реализовать:

     void handle(Callback[] callbacks)
         throws java.io.IOException, UnsupportedCallbackException;

LoginModule передает метод дескриптора CallbackHandler массив соответствующих javax.security.auth.callback.Callbacks, например NameCallback для имени пользователя и PasswordCallback для пароля, и CallbackHandler выполняют требуемое взаимодействие с пользователем и устанавливают соответствующие значения в Обратных вызовах.

MyCallbackHandler handle метод структурируется следующим образом:

public void handle(Callback[] callbacks)
  throws IOException, UnsupportedCallbackException {

  for (int i = 0; i < callbacks.length; i++) {
    if (callbacks[i] instanceof TextOutputCallback) {

      // display a message according to a specified type
      . . .

    } else if (callbacks[i] instanceof NameCallback) {

      // prompt the user for a username
      . . .

    } else if (callbacks[i] instanceof PasswordCallback) {

      // prompt the user for a password
      . . .

    } else {
        throw new UnsupportedCallbackException
         (callbacks[i], "Unrecognized Callback");
    }
  }
}

CallbackHandler handle метод передают массив экземпляров Обратного вызова, каждый определенный тип (NameCallback, PasswordCallback, и т.д.). Это должно обработать каждый Обратный вызов, выполняя взаимодействие с пользователем в пути, который является подходящим для выполняющегося приложения.

MyCallbackHandler обрабатывает три типа Обратных вызовов: NameCallback, чтобы запросить пользователя имя пользователя, PasswordCallback запрашивать пароль, и TextOutputCallback сообщать о любой ошибке, предупреждении, или других сообщениях SampleLoginModule хочет передаться пользователю.

handle метод обрабатывает TextOutputCallback, извлекая сообщение, о котором сообщат и затем печатая его к System.out, дополнительно предшествовавший дополнительной формулировкой, которая зависит от типа сообщения. Сообщение, о котором сообщат, определяется, вызывая TextOutputCallback getMessage метод и тип, вызывая getMessageType метод. Вот код для того, чтобы обработать TextOutputCallback:

if (callbacks[i] instanceof TextOutputCallback) {

  // display the message according to the specified type
  TextOutputCallback toc = (TextOutputCallback)callbacks[i];
  switch (toc.getMessageType()) {
     case TextOutputCallback.INFORMATION:
        System.out.println(toc.getMessage());
        break;
     case TextOutputCallback.ERROR:
        System.out.println("ERROR: " + toc.getMessage());
        break;
     case TextOutputCallback.WARNING:
        System.out.println("WARNING: " + toc.getMessage());
        break;
     default:
        throw new IOException("Unsupported message type: " +
            toc.getMessageType());
   }

handle метод обрабатывает NameCallback, запрашивая пользователя имя пользователя. Это делает это, печатая подсказку к System.err. Это тогда определяет имя для использования SampleLoginModule, вызывая NameCallback setName метод, передавая это имя вводил пользователем:

} else if (callbacks[i] instanceof NameCallback) {

  // prompt the user for a username
  NameCallback nc = (NameCallback)callbacks[i];

  System.err.print(nc.getPrompt());
  System.err.flush();
  nc.setName((new BufferedReader
      (new InputStreamReader(System.in))).readLine());

Точно так же handle метод обрабатывает PasswordCallback, печатая подсказку к System.err запрашивать пользователя пароль. Это тогда устанавливает пароль для использования SampleLoginModule, вызывая PasswordCallback setPassword метод, передавая это пароль, введенный пользователем, которого это читает, вызывая readPassword метод (показанный ниже):

} else if (callbacks[i] instanceof PasswordCallback) {

  // prompt the user for sensitive information
  PasswordCallback pc = (PasswordCallback)callbacks[i];

  System.err.print(pc.getPrompt());
  System.err.flush();
  pc.setPassword(readPassword(System.in));

readPassword метод является основным методом для того, чтобы считать пароль из InputStream:

private char[] readPassword(InputStream in) throws IOException {

    char[] lineBuffer;
    char[] buf;
    int i;

    buf = lineBuffer = new char[128];

    int room = buf.length;
    int offset = 0;
    int c;

  loop:
    while (true) {
      switch (c = in.read()) {
         case -1:
         case '\n':
            break loop;

         case '\r':
             int c2 = in.read();
             if ((c2 != '\n') && (c2 != -1)) {
                 if (!(in instanceof PushbackInputStream)) {
                     in = new PushbackInputStream(in);
                 }
                 ((PushbackInputStream)in).unread(c2);
             } else
                 break loop;

         default:
             if (--room < 0) {
                 buf = new char[offset + 128];
                 room = buf.length - offset - 1;
                 System.arraycopy(lineBuffer, 0, buf, 0, offset);
                 Arrays.fill(lineBuffer, ' ');
                 lineBuffer = buf;
             }
             buf[offset++] = (char) c;
             break;
        }
    }

    if (offset == 0) {
        return null;
    }

    char[] ret = new char[offset];
    System.arraycopy(buf, 0, ret, 0, offset);
    Arrays.fill(buf, ' ');

    return ret;
  }
}

SampleLoginModule.java и SamplePrincipal.java

SampleLoginModule.java реализует LoginModule интерфейс. SampleLoginModule является class, определенный конфигурационным файлом входа в систему учебного руководства как class, реализовывая требуемую базовую аутентификацию. Пользовательская аутентификация SampleLoginModule состоит из простой проверки, что у имени и пароля, определенного пользователем, есть определенные значения. Этот SampleLoginModule определяется конфигурационным файлом входа в систему учебного руководства как LoginModule, чтобы использовать, потому что (1) Это выполняет основной тип аутентификации, подходящей для любой среды, и таким образом является подходящим для учебного руководства для всех пользователей, и (2) Это предоставляет пример реализация LoginModule опытным программистам, которые требуют возможности записать LoginModule, реализовывая технологию аутентификации.

SamplePrincipal.java является демонстрационный class, реализовывая java.security. Основной интерфейс. Если аутентификация успешна, SampleLoginModule заполняет Предмет с SamplePrincipal, представляющим пользователя.

Важный: Если Вы - писатель приложения, Вы не должны знать, как записать LoginModule или Основную реализацию. Вы не должны исследовать код SampleLoginModule или SamplePrincipal. Все, что необходимо знать, - то, как записать Ваше приложение и определить конфигурационную информацию (такой как в конфигурационном файле входа в систему) так, что, приложение будет в состоянии использовать LoginModule, определенный конфигурацией, чтобы аутентифицировать пользователя. Вы должны определить, который LoginModule (s) Вы хотите использовать и считать документацию LoginModule, чтобы узнать о том, какие опции можно определить значения для (в конфигурации), чтобы управлять поведением LoginModule.

Любой поставщик может обеспечить реализацию LoginModule, которую можно использовать. Некоторые реализации предоставляются JRE от Sun Microsystems, как перечислено в документе Конфигурационного файла Входа в систему JAAS.

Информация для программистов, которые хотят записать LoginModule, может быть найдена в JAAS LoginModule Руководство разработчика.

Конфигурация Входа в систему

Аутентификация JAAS выполняется сменным способом, таким образом, приложения могут остаться независимыми от базовых технологий аутентификации. Системный администратор определяет технологии аутентификации, или LoginModules, чтобы использоваться для каждого приложения и конфигурирует их в Конфигурации входа в систему. Источник конфигурационной информации (например, файл или база данных) до тока javax.security.auth.login. Реализация конфигурации. Значение по умолчанию Configuration реализация от Sun Microsystems читает конфигурационную информацию из конфигурационных файлов, как описано в com.sun.security.auth.login.ConfigFile.html.

См. Конфигурационный файл Входа в систему JAAS для информации относительно того, каков конфигурационный файл входа в систему, что это содержит, и как определить, какой конфигурационный файл входа в систему должен использоваться.

Конфигурационный файл Входа в систему для Этого Учебного руководства

Как отмечено, конфигурационный файл входа в систему, который мы используем для этого учебного руководства, sample_jaas.config, содержит только одну запись, которая является

Sample {
  sample.module.SampleLoginModule required debug=true;
};

Эту запись называют "Демонстрационной", и это - имя что наше учебное приложение, SampleAcn, использование, чтобы обратиться к этой записи. Запись определяет, что LoginModule, который будет использоваться, чтобы сделать пользовательскую аутентификацию, является SampleLoginModule в sample.module пакет и что этот SampleLoginModule обязан "успешно выполняться" для аутентификации, которую будут считать успешным. SampleLoginModule успешно выполняется, только если имя и пароль, предоставленное пользователем, является тем, которое это ожидает ("testUser" и "testPassword", соответственно).

SampleLoginModule также определяет опцию "отладки", которая может быть установлена в true как показано. Если эта опция устанавливается в true, Выводы SampleLoginModule дополнительная информация о продвижении аутентификации. LoginModule может определить так много опций, как он хочет. Документация LoginModule должна определить имена возможного варианта и значения, которые можно установить в своем конфигурационном файле.

Выполнение Кода

Чтобы выполнить наш учебный код аутентификации JAAS, все, что необходимо сделать,

  1. Поместите следующий файл в каталог:
  2. Создайте подкаталог, названный "выборкой" того высокоуровневого каталога, и поместите следующее в это (отметьте классы SampleAcn и MyCallbackHandler, обоих в SampleAcn.java, находятся в названном пакете sample):
  3. Создайте подкаталог "демонстрационного" каталога и назовите его "модулем". Поместите следующее в это (отметьте SampleLoginModule, class находится в названном пакете sample.module):
  4. Создайте другой подкаталог "демонстрационного" каталога и назовите это "принципалом". Поместите следующее в это (отметьте SamplePrincipal, class находится в названном пакете sample.principal):
  5. В то время как в высокоуровневом каталоге, скомпилировать SampleAcn.java, SampleLoginModule.java, и SamplePrincipal.java:
    javac sample/SampleAcn.java sample/module/SampleLoginModule.java
    sample/principal/SamplePrincipal.java
    
    (Введите все это на одной строке.)
  6. Выполнитесь SampleAcn приложение, определяя

Полная команда ниже.

java -Djava.security.auth.login.config==sample_jaas.config sample.SampleAcn

Вы будете запрошены Ваше имя пользователя и пароль, и SampleLoginModule, определенный в конфигурационном файле входа в систему, проверит, чтобы гарантировать, что они корректны. SampleLoginModule ожидает "testUser" для имени пользователя и "testPassword" для пароля.

Вы будете видеть некоторые сообщения, выведенные SampleLoginModule в результате debug опция, устанавливаемая в true в конфигурационном файле входа в систему. Затем, если Ваш вход в систему будет успешен, то Вы будете видеть следующее сообщение, выведенное SampleAcn:

Authentication succeeded!
Если вход в систему не будет успешен (например, если Вы напишете пароль c орфографическими ошибками), то Вы будете видеть
Authentication failed:
сопровождаемый причиной отказа. Например, если Вы вводите пароль с опечаткой, можно видеть сообщение как следующее:
Authentication failed:
  Password Incorrect

SampleAcn дает Вам три возможности успешно войти в систему.

Выполнение Кода с Менеджером безопасности

Когда программа Java выполняется с установленным менеджером безопасности, программе не позволяют получить доступ к ресурсам или иначе выполнить секретные операции безопасности, если этому явно не предоставляют разрешение, чтобы сделать так политикой безопасности в действительности. В платформах Java, которые являются совместимыми с J2SE v 1.2 и позже, разрешение должна предоставить запись в файле политики.

Большинство браузеров устанавливает менеджера безопасности, таким образом, апплеты, обычно выполняемые под наблюдением менеджера безопасности. Приложения, с другой стороны, не делают, так как менеджер безопасности автоматически не устанавливается, когда приложение работает. Таким образом приложение, как наш SampleAcn приложение, по умолчанию имеет полный доступ к ресурсам.

Чтобы запустить приложение с менеджером безопасности, просто вызовите интерпретатор с a -Djava.security.manager параметр включается в командную строку.

Если Вы пытаетесь вызвать SampleAcn с менеджером безопасности, но не определяя файла политики, Вы получите следующий (если у Вас не будет установки политики значения по умолчанию в другом месте, которая предоставляет необходимые полномочия или предоставления AllPermission):

% java -Djava.security.manager \
 -Djava.security.auth.login.config==sample_jaas.config sample.SampleAcn
Exception in thread "main" java.security.AccessControlException:
  access denied (
  javax.security.auth.AuthPermission createLoginContext.Sample)

Как можно видеть, Вы получаете AccessControlException, потому что мы не создали и использовали файл политики, предоставляющий наш код разрешение, которое требуется, чтобы разрешить создать LoginContext.

Вот полные шаги, требуемые, чтобы быть в состоянии выполнить наш SampleAcn приложение с установленным менеджером безопасности. Можно пропустить первые пять шагов, если Вы уже сделали их, как описано в Выполнении Кода.

  1. Поместите следующий файл в каталог:
  2. Создайте подкаталог, названный "выборкой" того высокоуровневого каталога, и поместите следующее в это (отметьте классы SampleAcn и MyCallbackHandler, обоих в SampleAcn.java, находятся в названном пакете sample):
  3. Создайте подкаталог "демонстрационного" каталога и назовите его "модулем". Поместите следующее в это (отметьте SampleLoginModule, class находится в названном пакете sample.module):
  4. Создайте другой подкаталог "демонстрационного" каталога и назовите это "принципалом". Поместите следующее в это (отметьте SamplePrincipal, class находится в названном пакете sample.principal):
  5. В то время как в высокоуровневом каталоге, скомпилировать SampleAcn.java, SampleLoginModule.java, и SamplePrincipal.java:
    javac sample/SampleAcn.java sample/module/SampleLoginModule.java
    sample/principal/SamplePrincipal.java
    
    (Введите все это на одной строке.)
  6. Создайте файл JAR, содержащий SampleAcn.class и MyCallbackHandler.class:
    jar -cvf SampleAcn.jar sample/SampleAcn.class
    sample/MyCallbackHandler.class
    

    (Введите все это на одной строке.) Эта команда создает файл JAR, SampleAcn.jar, и места SampleAcn.class и MyCallbackHandler.class файлы в этом.

  7. Создайте файл JAR, содержащий SampleLoginModule.class и SamplePrincipal.class:
    jar -cvf SampleLM.jar sample/module/SampleLoginModule.class
    sample/principal/SamplePrincipal.class
    
  8. Создайте файл политики, предоставляющий необходимые полномочия.

    Разрешение, которое необходимо коду, пытающемуся инстанцировать LoginContext, является a javax.security.auth.AuthPermission с целью "createLoginContext. <имя записи>". Здесь, <имя записи> обращается к имени записи конфигурационного файла входа в систему что ссылки приложения в его инстанцировании LoginContext. Имя, используемое нашим SampleAcn инстанцирование LoginContext приложения является "Демонстрационным", как можно видеть в коде:

    LoginContext lc =
        new LoginContext("Sample",
              new MyCallbackHandler());
    

    Таким образом, разрешение, которому нужно предоставить SampleAcn.jar

    permission javax.security.auth.AuthPermission
      "createLoginContext.Sample";
    

    SampleLM.jar файлу также нужно предоставить разрешение. Документация для LoginModule должна сказать Вам, какие полномочия ее нужно предоставить. В случае SampleLoginModule это нуждается в a javax.security.auth.AuthPermission с целью "modifyPrincipals", чтобы заполнить Предмет с Принципалом:

    permission javax.security.auth.AuthPermission
      "modifyPrincipals";
    

    Скопируйте файл политики sampleacn.policy в тот же самый каталог как это, в котором Вы сохранили SampleAcn.java, и т.д.. Файл политики содержит следующий grant оператор, чтобы предоставить SampleAcn.jar (в текущем каталоге) его необходимое разрешение:

    grant codebase "file:./SampleAcn.jar" {
       permission javax.security.auth.AuthPermission
                        "createLoginContext.Sample";
    };
    
    

    Файл политики также содержит следующий grant оператор, чтобы предоставить SampleLM.jar (также в текущем каталоге) его необходимое разрешение:

    grant codebase "file:./SampleLM.jar" {
       permission javax.security.auth.AuthPermission
                        "modifyPrincipals";
    };
    

    Отметьте: файлы Политики и структура записей в пределах них описываются в Синтаксисе Файла Реализации и Политики Политики Значения по умолчанию. Полномочия описываются здесь.

  9. Выполнитесь SampleAcn приложение, определяя
    1. соответствующим -classpath пункт, что классы должны разыскиваться в SampleAcn.jar и SampleLM.jar Файлы JAR,
    2. -Djava.security.manager то, что менеджер безопасности должен быть установлен,
    3. -Djava.security.policy==sampleacn.policy то, что файл политики, который будет использоваться, sampleacn.policy, и
    4. -Djava.security.auth.login.config==sample_jaas.config то, что конфигурационный файл входа в систему, который будет использоваться, sample_jaas.config.

    Ниже полные команды, чтобы использовать и для Microsoft Windows и для систем Unix. Единственная разница - то, что на системах Microsoft Windows Вы используете точки с запятой, чтобы разделить элементы пути к классу, в то время как Вы используете двоеточия с этой целью на системах Unix.

    Вот полная команда для систем Microsoft Windows:

    java -classpath SampleAcn.jar;SampleLM.jar
     -Djava.security.manager
     -Djava.security.policy==sampleacn.policy \
     -Djava.security.auth.login.config==sample_jaas.config \
     sample.SampleAcn
    

    Вот полная команда для систем UNIX:

    java -classpath SampleAcn.jar:SampleLM.jar
     -Djava.security.manager
     -Djava.security.policy==sampleacn.policy \
     -Djava.security.auth.login.config==sample_jaas.config \
     sample.SampleAcn
    

    Введите все это на одной строке. Многократные строки используются здесь для четкости. Если команда является слишком длинной для Вашей системы, Вы, возможно, должны поместить это в.bat файл (для Microsoft Windows) или.sh файл (для UNIX) и затем петлять, чтобы выполнить команду.

    Так как указанный файл политики содержит запись, предоставляющую код необходимые полномочия, выполнение должно продолжиться без любых исключений, указывающих, что необходимое разрешение не предоставили. Вы будете запрошены имя пользователя, и пароль (используйте "testUser" и "testPassword"), и SampleLoginModule, определенный в конфигурационном файле входа в систему, проверит имя и пароль. Если Ваш вход в систему будет успешен, то Вы будете видеть сообщение "Аутентификация, за которой следуют!" и в противном случае Вы будете видеть "Отказавшую аутентификацию:" сопровождаемый причиной отказа.



Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами