Restlet 2.0.8:单个restlet应用程序实例的多种身份验证方法(BASIC、DIGEST)?
Posted
技术标签:
【中文标题】Restlet 2.0.8:单个restlet应用程序实例的多种身份验证方法(BASIC、DIGEST)?【英文标题】:Restlet 2.0.8: Multiple authentication methods (BASIC, DIGEST) for single restlet Application instance? 【发布时间】:2011-07-28 07:13:32 【问题描述】:我们使用的是 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 可以做到这一点吗?
最好, 克里斯
【问题讨论】:
【参考方案1】:这可以通过链接 DigestAuthenticator(可选:true)和 BasicAuthenticator(可选:false)来实现。伪代码:
digestAuth.setNext(basicAuth);
basicAuth.setNext(router);
【讨论】:
如果我错了,请纠正我,但这意味着 /echo 和 /status 至少都受到基本身份验证的保护,对吧? 我们想要的是让 Echo 仅受 Digest 保护,而 Status 受基本身份验证保护。我们所做的是引入一个“分叉”路由器,并将摘要和 basicAuth 路由器附加到不同的路径,如下所示(伪代码): forkingRouter.attach("/status", basicAuth, Template.MODE_STARTS_WITH); forkingRouter.attach("/echo", digestAuth, Template.MODE_STARTS_WITH);【参考方案2】:在类似的情况下,我们创建了两个 org.restlet.Application 对象,需要对一个应用程序进行身份验证,如上述问题,并且确实将两个应用程序附加到 Servlet 容器中的不同路径。
【讨论】:
以上是关于Restlet 2.0.8:单个restlet应用程序实例的多种身份验证方法(BASIC、DIGEST)?的主要内容,如果未能解决你的问题,请参考以下文章
在 OSGi 中配置 Restlet 以使用 Jetty 连接器(非简单连接器)
restlet 2.3.5 org.restlet包导入eclipse出现的com.sun.net.httpserver类包找不到问题