Рестлет - Использование переменных шаблона 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;
}
}