Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Запуск примера кастомного хранилища идентификаторов

Пример, описанный в этом разделе, демонстрирует, как связать и использовать кастомное хранилище идентификаторов в вашем приложении для проверки учётных данных.

Темы включают в себя:

Обзор примера кастомного хранилища идентификаторов

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

В этом примере показано, как определить кастомное хранилище идентификаторов TestIdentityStore и сделать его частью развёртываемого приложения. Используемый механизм аутентификации — BasicAuthenticationMechanism.

Исходный код для этого примера находится в каталоге tut-install/examples/security/security-api/custom-identity-store.

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

Когда в приложение отправляется запрос, содержащий учётные данные, настраиваемый механизм проверки подлинности задействуется, и проверка подлинности выполняется по TestIdentityStore, как определено в приложении.

После проверки подлинности приложение также проверяет роли вызывающего субъекта и отправляет подробности как часть ответа.

Обратите внимание, что в GlassFish, если пользователь предоставляет неверные учётные данные при использовании BasicAuthenticationMechanism, то realmName представляется пользователю в качестве подсказки.

curl -I -u Joe http://localhost:8080/custom-identity-store/servlet
Enter host password for user 'Joe':
HTTP/1.1 401 Unauthorized
Server: GlassFish Server Open Source Edition  5.0
X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition  5.0  Java/Oracle Corporation/1.8)
WWW-Authenticate: Basic realm="file"
Content-Length: 1090
Content-Language:
Content-Type: text/html

Определите пользователей и группы в хранилище идентификаторов

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

Пользователь

Пароль

Группа

Joe

secret1

foo, bar

В следующем фрагменте кода показано, как определить учётные данные и роли, назначенные пользователям в файле TestIdentityStore.java.

if (usernamePasswordCredential.compareTo("Joe", "secret1")) {
    return new CredentialValidationResult("Joe", new HashSet<>(asList("foo", "bar")));
}

Укажите механизм аутентификации

В этом приложении учётные данные проверяются с использованием механизма базовой аутентификации. Укажите аннотацию @BasicAuthenticationMechanismDefinition в ApplicationConfig.java, чтобы убедиться, что BasicAuthenticationMechanism используется для выполнения проверки учётных данных.

@BasicAuthenticationMechanismDefinition(
        realmName = "file"
)

@ApplicationScoped
@Named
public class ApplicationConfig {

}

Объявите роли в контейнере сервлетов

Когда к приложению делается запрос, назначенные пользователю роли возвращаются как часть ответа. Обратите внимание, что контейнер должен быть осведомлён о поддерживаемых ролях, которые определяются с помощью аннотации @Declareroles({"foo", "bar", "kaz"}), как показано ниже.

@DeclareRoles({ "foo", "bar", "kaz" })
@WebServlet("/servlet")
public class Servlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String webName = null;
        if (request.getUserPrincipal() != null) {
            webName = request.getUserPrincipal().getName();
        }

        response.getWriter().write("web username: " + webName + "\n");

        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
    }

}

В GlassFish 5.0 назначение группы ролям по умолчанию включено. Поэтому не требуется связывать web.xml с приложением, чтобы обеспечить сопоставление ролей и групп.

Запуск примера custom-identity-store

Вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска приложения custom-identity-store, как описано в следующих разделах:

Сборка, упаковка и развёртывание custom-identity-store с IDE NetBeans

  1. Если вы ещё этого не сделали, запустите сервер GlassFish. Смотрите Запуск и остановка сервера GlassFish.

  2. В меню «Файл» выберите «Открыть проект».

  3. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/security/security-api
  4. Выберите каталог custom-identity-store.

  5. Нажмите Открыть проект.

  6. На вкладке «Проекты» кликните правой кнопкой мыши проект custom-identity-store и выберите «Сборка».

    Эта команда собирает и развёртывает пример приложения в GlassFish Server.

Сборка, упаковка и развёртывание custom-identity-store с использованием Maven

  1. Если вы ещё этого не сделали, запустите сервер GlassFish. Смотрите Запуск и остановка сервера GlassFish ..

  2. В окне терминала перейдите в:

    tut-install/examples/security/security-api/custom-identity-store
  3. Введите следующую команду:

    mvn install

    Эта команда собирает и упаковывает приложение в WAR-файл, custom-identity-store.war, который находится в каталоге target, а затем развёртывает WAR-файл.

Запуск custom-identity-store

В этом примере используйте учётные данные пользователя Joe, чтобы сделать запрос и проверить ответ в соответствии с учётными данными, определёнными в TestIdentityStore.

  1. Сделайте запрос к развёрнутому приложению, используя действительные учётные данные, введя следующий URL запроса в веб-браузере:

    URL запроса:

    http://localhost:8080/custom-identity-store/servlet?name=Joe&password=secret1

    Ответ:

    web username: Joe
    web user has role "foo": true
    web user has role "bar": true
    web user has role "kaz": false
  2. Проверьте аутентификацию, используя недействительные учётные данные. Сделайте запрос к развёрнутому приложению, введя следующий URL запроса в вашем веб-браузере:

    URL запроса:

    http://localhost:8080/custom-identity-store/servlet?name=Joe&password=secret3

    Ответ:

    HTTP Status 401 — Unauthorized
    
    type Status report
    
    message Unauthorized
    
    description This request requires HTTP authentication.
    
    GlassFish Server Open Source Edition 5

Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)