Restlet 2.0.8:单个restlet应用程序实例的多种身份验证方法(BASIC,DIGEST)?

时间:2011-07-28 07:13:32

标签: java restlet http-basic-authentication http-digest

我们正在使用Restlet 2.0.8并且有一个Application实例覆盖org.restlet.Application#createInboundRoot()。在那里,我们创建路由器实例并返回(此刻)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有可能吗?

最佳, 克里斯

2 个答案:

答案 0 :(得分:1)

这可以通过链接DigestAuthenticator(可选:true)和BasicAuthenticator(可选:false)来实现。伪代码:

   digestAuth.setNext(basicAuth);
   basicAuth.setNext(router);

答案 1 :(得分:0)

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