1

我们正在使用 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可以做到这一点吗?

最好的,克里斯

4

2 回答 2

1

This is possible by chaining the DigestAuthenticator (optional: true) and the BasicAuthenticator (optional: false). Pseudo-code:

   digestAuth.setNext(basicAuth);
   basicAuth.setNext(router);
于 2011-07-29T09:19:12.160 回答
0

在类似的情况下,我们创建了两个 org.restlet.Application 对象,需要对一个应用程序进行身份验证,如上面的问题一样,并且确实将两个应用程序附加到 Servlet 容器中的不同路径。

于 2012-11-30T14:21:37.303 回答