0

假设一个黑板类型的应用程序。有 2 个项目 - ProjectA 和 ProjectB。用户“nupul”(我)是这两个项目的一部分。对于 A,我是管理员,对于 B,我只是“成员”(没有管理员权限)

在访问资源时,/MySite/ProjectA/Items我想检查用户是否是管理员。

我知道这可以通过{projectName}从请求中选择参数并使用(发出请求的用户的)标识符并将其转发以检查数据库等来简单地完成,

我的问题是“如何”在身份验证期间使用 Enroler 添加角色。因为我{projectName}在那个阶段无法访问参数。我不知道你是否必须使用组/领域等来完成这项工作,但老实说,我花了很长时间才明白如何有效地使用它?(即,在请求被转发到资源之前)

我的意思是我知道我可以创建这些组/领域,但是我如何从资源中访问正确的“角色”????Restlet 需要有更真实的例子和更好的文档来展示它的类的使用!!快把我逼疯了!!身份验证不应该这么难!:)

4

1 回答 1

0

做你想做的事情的方法是根据应用程序中的项目名称拆分路由器(方法 createInboundRoot)。在这种情况下,将在调用身份验证器之前评估项目名称。请参阅以下实施此类方法的一些示例:

public Restlet createInboundRoot() {
    Router rootRouter = new Router(getContext());
    rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH);

    rootRouter.attach("/{projectname}/", createApplicationForProject());
    return rootRouter;
}

private Restlet createApplicationForProject() {
    Router router = new Router(getContext());

    ChallengeAuthenticator guard
             = new ChallengeAuthenticator(getContext(),
                        ChallengeScheme.HTTP_BASIC, "realm");
    guard.setVerifier(verifier);
    guard.setEnroler(enroler);
    guard.setNext(router);

    router.attach("items", ItemsServerResource.class);
    return guard;
}

使用这种方法,您将可以访问验证程序中 projectname 变量的值,并能够在身份验证处理中使用它。

希望它可以帮助你,蒂埃里

于 2011-08-30T08:01:50.787 回答