Restlet 2.0.8: несколько методов аутентификации (BASIC, DIGEST) для одного экземпляра приложения Restlet? - PullRequest
1 голос
/ 28 июля 2011

Мы используем Restlet 2.0.8 и экземпляр приложения перезаписывает org.restlet.Application # createInboundRoot ().Там мы создаем экземпляр Router и возвращаем (на данный момент) DigestAuthenticator, как показано в приведенном ниже коде:

@Override
public synchronized Restlet createInboundRoot() {
    log.info("App::createInboundRoot called");

    this.authenticator = getAuthenticator();

    Router router = new Router(getContext());
    router.attach("/echo", EchoResource.class);
    router.attach("/status", StatusResource.class);

    authenticator.setNext(router);
    return authenticator;
}

private ChallengeAuthenticator getAuthenticator() {
    DigestAuthenticator auth = new DigestAuthenticator(getContext(), "Guard", "s3cret");
    auth.setWrappedVerifier(new SimpleVerifier("user","pass");
    auth.setOptional(false);
    return auth;
}

Чего я хотел бы достичь:

  • если EchoResource использует дайджест-аутентификацию, а StatusResource должен использовать базовую аутентификацию HTTP

Возможно ли это с помощью Restlets?

Best, Chris

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Это возможно путем объединения DigestAuthenticator (необязательно: true) и BasicAuthenticator (необязательно: false).Псевдокод:

   digestAuth.setNext(basicAuth);
   basicAuth.setNext(router);
0 голосов
/ 30 ноября 2012

В аналогичной ситуации мы создали два объекта org.restlet.Application, для которых требуется аутентификация для одного приложения, как в вопросе выше, и прикрепили оба приложения к различным путям в контейнере сервлета.

...