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

これは、DigestAuthenticator(オプション:true)とBasicAuthenticator(オプション:false)をチェーンすることで可能になります。擬似コード:

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

同様の状況で、2つのorg.restlet.Applicationオブジェクトを作成し、上記の質問のように1つのアプリケーションの認証を要求し、両方のアプリケーションをサーブレットコンテナの異なるパスにアタッチしました。

于 2012-11-30T14:21:37.303 に答える