Рестлет - Использование переменных шаблона URI в Authenticator

Я пытаюсь выполнить аутентификацию в Restlet, где я ищу учетные данные, основанные на части URI, то есть многопользовательской аутентификации.

Мне не удалось связать маршрутизатор для аутентификатора с маршрутизатором для доступа к ресурсам. Это вообще возможно? Допустим, у меня есть Authenticator, которому нужна переменная tenantId для поиска пользователя. Я пробовал установку, подобную следующей, чтобы заставить ее работать безуспешно. Мысли?

public class MyApplication extends Application
{
    public Authenticator authenticator;

    @Override
    public Restlet createInboundRoot()
    {
        Router router = new Router(getContext());
        router.attach("/", TraceResource.class);
        router.attach("/{apiVersion}/{tenantId}/pathOne/{someId}",
            ResourceOne.class);
        router.attach("/{apiVersion}/{tenantId}/pathTwo/{someId}",
            ResourceTwo.class);

        authenticator.setNext(router);

        Router authenticationRouter = new Router(getContext());
        authenticationRouter.attach("/{apiVersion}/{tenantId}/{remaining}",
            authenticator).setMatchingMode(Template.MODE_STARTS_WITH);

        return authenticationRouter;
    }
}

1 ответ

Решение

Это почти правильно, вот исправление:

public class MyApplication extends Application
{
    public Authenticator authenticator;

    @Override
    public Restlet createInboundRoot()
    {
        Router router = new Router(getContext());
        router.attach("/", TraceResource.class);
        router.attach("/pathOne/{someId}", ResourceOne.class);
        router.attach("/pathTwo/{someId}", ResourceTwo.class);
        authenticator.setNext(router);

        Router authenticationRouter = new Router(getContext());
        authenticationRouter.attach("/{apiVersion}/{tenantId}",
            authenticator).setMatchingMode(Template.MODE_STARTS_WITH);

        return authenticationRouter;
    }
}
Другие вопросы по тегам