我已经安装了" Domino示例REST服务功能"来自901v00_11.20141217-1000 version of XPages Extension Library。 OpenNtfSample服务(com.ibm.domino.services.sample.service.SampleService)通常可以正常工作,唯一的问题是它完全忽略了服务器的身份验证设置。
我已经尝试了Authenticating Domino REST Service Requests中描述的基本和会话身份验证,我得到的结果如下 - 服务始终返回数据,不会要求任何用户名和密码。
服务器现在配置了会话身份验证,当我尝试访问时,我会收到密码提示
{} my_server的/ API /数据
但是在我打开时没有得到它
{} my_server的/ API /样品
我添加了此网站规则
描述:DAS服务 规则类型:覆盖会话身份验证 传入网址格式: / api /
服务器更改了
的密码提示{} my_server的/ API /数据
但是
{} my_server的/ API /样品
仍然开放。
有没有人遇到过这种错误?任何人都可以帮我密码保护这个示例服务,以便我可以根据这个例子开始自己开发一次吗?
答案 0 :(得分:0)
/ api / sample 资源是故意开放的。这只会返回指向联系人资源的链接 - /xpagesext.nsf/api/sample/contacts 。
如果您确实希望阻止匿名访问 / api / sample 资源,则有两种可能的解决方案:1)禁用所有HTTP请求的匿名访问,或者2)更改RootResource类。第一个解决方案是服务器配置更改。我相信你可以在其他地方找到相关的细节。由于这是StackOverflow,我将重点关注第二个解决方案。
正如您已经注意到的那样,我们不允许匿名访问 / api / data 资源。您可以通过对RootResource.getLinks()的简单更改来模仿 / api / sample 资源中的行为。在方法的顶部附近,只需添加以下代码行:
boolean authenticated = false;
Session session = ContextInfo.getUserSession();
if ( session != null ) {
String userName = session.getEffectiveUserName();
if ( userName != null && !userName.equals("Anonymous")) {
authenticated = true;
}
}
if ( !authenticated ) {
throw new NoAccessSignal("Need user context");
}
顺便说一句,您不需要对联系人资源类(ContactsListResource.java)进行相同的更改。由于联系人资源URL包含数据库名称(xpagesext.nsf),因此Web服务器将在将请求转发给REST服务之前尝试打开数据库。您可以通过更改xpagesext.nsf的ACL来阻止对联系人资源的匿名访问。只需确保默认访问权限是"无权访问"。