我曾作为GSoC 2016项目在Apache Nutch的NutchServer的Security Layer上工作,并完成了它。 在此博客文章中,我将解释其工作原理和使用方法。 首先,建议您阅读以前有关GSoC 2016接受的帖子: http ://furkankamaci.com/gsoc-2016-acceptance-for-apache-nutch/(如果您尚未阅读的话)。
Apache Nutch是一个高度可扩展和可扩展的开源Web爬网程序软件项目。 源于Apache Lucene,该项目已经多样化,现在包括两个代码库,分别是:
Nutch 1.x:成熟度高,可用于生产的履带。 1.x依靠Apache Hadoop数据结构实现精细的配置,这对于批处理非常有用。
Nutch 2.x:这是一个从1.x直接汲取灵感的新兴替代方案,但在一个关键方面有所不同。 通过使用Apache Gora处理对象到持久性映射,可以从任何特定的基础数据存储中抽象出存储。 这意味着我们可以实现极为灵活的模型/堆栈,以将所有内容(获取时间,状态,内容,已解析的文本,外链,内链等)存储到许多NoSQL存储解决方案中。
Nutch 2.x具有REST API,但上面没有安全层。 我已经实现了基本身份验证,摘要式身份验证,作为身份验证机制的SSL支持以及对NutchServer的细粒度授权支持。
当您想在NutchServer API上启用安全性时,应遵循以下方式:
- 通过将设置: restapi.auth属性设置为BASIC , DIGEST或SSL ,在nutch-site.xml上启用安全性。 NONE是默认的,没有提供安全。
- 如果您选择了BASIC或DIGEST作为身份验证类型,则设置restapi.auth.users属性。 用户名,密码和角色应以竖线字符(|)分隔。每个用户应以逗号(,)分隔。 即admin | admin | admin,用户|用户|用户。 默认值为admin | admin | admin,user | user | user
- 集restapi.auth.ssl.storepath,restapi.auth.ssl.storepass,如果你有在restapi.auth属性选择SSL作为验证模式restapi.auth.ssl.keypass性能。
当您想通过客户端代码连接到NutchServer API时,可以按照以下方式进行操作:
1.基本认证
ClientResource resource = new ClientResource(protocol + "://" + domain + ":" + port + path);
resource.setChallengeResponse(challengeScheme, username, password);try {resource.get();
} catch (ResourceException rex) {//catch it
}
2.摘要式身份验证
在第1步中使用相同的代码,并在其后添加这些代码:
// Use server's data to complete the challengeResponse object
ChallengeRequest digestChallengeRequest = retrieveDigestChallengeRequest(resource);
ChallengeResponse challengeResponse = new ChallengeResponse(digestChallengeRequest, resource.getResponse(),
username, password.toCharArray());resource.setChallengeResponse(challengeResponse);
try {resource.get();
} catch (ResourceException rex) {//catch it
}...private ChallengeRequest retrieveDigestChallengeRequest (ClientResource resource) {ChallengeRequest digestChallengeRequest = null;for (ChallengeRequest cr : resource.getChallengeRequests()) {if (ChallengeScheme.HTTP_DIGEST.equals(cr.getScheme())) {digestChallengeRequest = cr;break;}}return digestChallengeRequest;
}
3. SSL
请遵循“基本身份验证”中的相同步骤,但是不要忘记将SSL证书添加到您的信任存储中。
NutchServer通过其REST API提供对许多功能的访问。 实施身份验证和授权使用户可以通过安全方式与其进行通信。
翻译自: https://www.javacodegeeks.com/2016/09/security-layer-nutchserver.html