本文是接前面两篇,结束本篇就完成密码对等组创建,发现及加入的过程。
发现一个对等组在以前关于JXTA中的文章中都有说到,没有什么大的差别,在这里主要是注意验证器如何验证用户和密码的过程,不过也相对比较简单。代码的注释中都有详细的说明。直接秀出代码:
1、搜索对等组方法
//搜索到该“群”
private PeerGroup discoveryPeerGroup(PeerGroup netpg,
PeerGroupID satellaPID) {
//要加入”群“,首先,得搜索到”群“
//在很多情况下,我们一般使用发现监听及时发现
//在这里我不这样,因为已经确定对等组广告是在本地缓存中,相对比较简单
PeerGroup satellaPeerGroup = null;
DiscoveryService netpgService = null;
if(null!=netpg){
netpgService = netpg.getDiscoveryService();
}else{
System.out.println("父对等组为空,不能加入目标对等组");
System.exit(-1);
}
boolean isGroupFound = false;
Enumeration localPGAdv = null;
PeerGroupAdvertisement spgAdv = null;
while(!isGroupFound){
try {
localPGAdv = netpgService.getLocalAdvertisements(DiscoveryService.GROUP, "GID", satellaPID.toString());
} catch (IOException e) {
System.out.println("本地没有发现该对等组广告");
e.printStackTrace();
}
if(null!=localPGAdv){
while(localPGAdv.hasMoreElements()){
PeerGroupAdvertisement pgAdv = null;
pgAdv = (PeerGroupAdvertisement)localPGAdv.nextElement();
if(pgAdv.getPeerGroupID().equals(satellaPID)){
spgAdv = pgAdv;
isGroupFound = true;
break;
}
}
}
try {
Thread.sleep(5*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
satellaPeerGroup = netpg.newGroup(spgAdv);
} catch (PeerGroupException e) {
System.out.println("不能用对等组广告创建目标对等组");
e.printStackTrace();
return null;
}
return satellaPeerGroup;
}
2、验证器对身份认证
/**
* 要执行该方法而且是符合要求完认证后才能加入到对等组。为了完成验证,验证方法需求从验证器(auth)中提取。
* 这些方法的名称开始是"setAuth"。其中setAuth1Identity方面支持验证login,而setAuth2_Password支持验证passwd
* @param auth
* @param login
* @param passwd
*/
private void completeAuth(Authenticator auth, String login, String passwd) {
Method[] methods = auth.getClass().getMethods();
Vector authMethods = new Vector();
//下面for循环只是对auth中的方法过滤和排序
for(int eachMethod = 0;eachMethod<methods.length;eachMethod++){
if(methods[eachMethod].getName().startsWith("setAuth")){
if(Modifier.isPublic(methods[eachMethod].getModifiers())){
for(int doInsert = 0;doInsert<=authMethods.size();doInsert++){
int insertHere = 1;
if(doInsert == authMethods.size()){
insertHere = doInsert;
}else{
if(methods[eachMethod].getName().compareTo(((Method)authMethods.elementAt(doInsert)).getName())<=0){
insertHere = doInsert;
}
}
if(-1!=insertHere){
authMethods.insertElementAt(methods[eachMethod], insertHere);
break;
}//end if (-1 != insertHere)
}//end for(int doInsert =0
}//end if (modifier.isPublic
}//end if (methods[eachMethod]
}//end for (int eachMethod)
Object[] AuthId = {login};
Object[] AuthPasswd = {passwd};
//重点是下面,调用验证器的验证方法对用户和密码进行确认
for(int eachAuthMethod = 0;eachAuthMethod<authMethods.size();eachAuthMethod++){
Method doingMethod = (Method)authMethods.elementAt(eachAuthMethod);
if(doingMethod.getName().equals("setAuth1Identity")){
//
try {
doingMethod.invoke(auth, AuthId);
} catch (Exception e) {
e.printStackTrace();
}
}else
if(doingMethod.getName().equals("setAuth2_Password")){
try {
doingMethod.invoke(auth, AuthPasswd);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3、确认身份,通过认证则加入,不通过则不能加入
//加入“群”
private void joinPeerGroup(PeerGroup spg, String login, String passwd) {
StructuredDocument creds = null;
AuthenticationCredential authCred = new AuthenticationCredential(spg,null,creds);
MembershipService membershipService = spg.getMembershipService();
Authenticator auth = null;
try {
auth = membershipService.apply(authCred);
completeAuth(auth,login,passwd);
if(!auth.isReadyForJoin()){
System.out.println("身份认证失败");
System.out.println("没有完成认证,不能加入对等组");
}
membershipService.join(auth);
} catch (Exception e) {
System.out.println("认证失败");
System.out.println("登录信息不正确,不能加入对等组");
e.printStackTrace();
System.exit(-1);
}
}
加上这篇,“JXTA中通过身份认证来加入“群””的全部过程完成。代码也已经全部共享。
分享到:
相关推荐
5. **服务(Services)**: JXTA框架提供的功能模块,例如消息服务、身份验证服务等,可以通过广告机制发现和使用。 **JXTA Messenger 实现细节** 1. **对等组(Peer Group)**: JXTA Messenger运行在特定的对等组...
1. **身份认证与安全性:** JXTA提供了基于证书的身份认证和加密机制,确保通信的安全性和完整性。 2. **网络路由:** P2pSocket能够处理复杂的网络拓扑,包括多跳路由,使得节点间的通信更为灵活。 3. **错误处理:...
通过使用"jxta.jar",开发者可以轻松地在应用程序中集成P2P功能,如创建和加入网络、发布和查找资源、建立通信管道等。 其次,"cms.jar"可能指的是CMS(Cryptographic Message Syntax),这是一个用于加密和签名...
- **NetPeer**:代表网络中的单个节点,处理网络连接和身份认证。 - **PipeService**:提供创建和管理管道的接口,用于设备间的通信。 - **AdvService**:用于发布、查询和接收广告,实现资源的发现和共享。 - *...
**Java P2P网络编程与JXTA技术详解** ...总之,"JXTA-Java-P2P网络编程技术书后源码"是一个宝贵的资源,它帮助开发者通过实践来学习和理解P2P网络编程和JXTA的精髓,从而能够设计和实现自己的P2P解决方案。
4. **身份认证与安全**:为了确保聊天内容的安全性,JXTA提供了加密和身份验证机制。聊天器可能利用这些功能来保护用户隐私,防止未经授权的访问。 5. **容错与网络动态性**:P2P网络中的节点可能会随时加入或离开...
5. **身份管理(Identity Management)**:JXTA使用数字证书来验证节点的身份,确保网络通信的安全性和可靠性。 6. **协议栈(Protocol Stack)**:JXTA提供了基于TCP/IP的底层通信协议栈,但同时也支持其他传输...
4. **服务接口(Service)**:JXTA支持多种服务,如身份验证、资源搜索、消息传递等。开发者可以通过定义服务接口来扩展JXTA的功能。 5. **协议栈**:JXTA协议栈包括了网络层、传输层、会话层、应用层等多个层次,...
2. **JXTA协议**:JXTA提供了P2P网络的基础框架,包括对等体的发现、连接、身份验证和安全通信等功能。通过JXTA,开发者可以轻松实现P2P应用的各个组件,如数据交换、服务发布和查找。 3. **对等组与管道**:在JXTA...
4. **安全与身份验证**:了解JXTA的安全模型,包括证书、数字签名和加密,确保P2P网络中的通信安全。 5. **服务自定义**:学习如何根据需求扩展JXTA,创建自定义服务来满足特定业务场景。 6. **性能优化**:掌握...
- **认证**:节点在加入组群之前需要通过身份验证,确保只有合法的节点才能参与通信。 - **授权**:节点之间可以设置权限控制,指定哪些节点可以访问特定资源或执行特定操作。 - **完整性保护**:使用数字签名等技术...
协议栈是JXTA实现P2P通信的多层次结构,包括身份验证、路由、发现和交换等组件。广告是一种标准化的数据结构,用于描述节点和服务,以便在网络中广播和发现。 在提供的压缩包中,"jxme-2.1.3-bin.zip"包含了JXTA的...
JXTA协议栈包含一系列基于XML的协议,用于实现P2P网络中的身份验证、服务发现、消息传递等功能。主要组件包括: - **广告(Advertisements)**:JXTA使用XML格式的广告来描述网络中的资源和服务,便于搜索和发现。 ...
JXTA使用XML来交换信息,支持多种服务,如身份验证、广告发布、流媒体传输等。 2. **P2P网络模型**:了解P2P网络的基本结构和工作原理,包括对等节点的发现、连接建立、资源搜索和数据传输。在JXTA中,节点通过发布...
7. **容错和可用性**: P2P网络中的节点可能会随时加入或离开,JXTA通过复制和分散数据来提高系统的可靠性和可用性。 在"录像截图"中,可能包含了JXTA实现P2P文件共享的演示或示例,帮助用户直观了解其工作流程。"可...
5. **JXTA网络的加入与离开**:描述了节点如何加入和离开P2P网络,以及这个过程中的身份验证和安全考量。 **第四章:JXTA服务与管道** 这一章的重点在于JXTA的服务模型和通信机制: 1. **服务发现与提供**:讨论了...
10. **容错和可扩展性(Fault Tolerance and Scalability)**: JXTA设计时考虑了网络中的节点可能随时加入或离开,因此具有良好的容错性和可扩展性。 通过学习JXTA,开发者可以利用其提供的API和工具来创建分布式...
4. **安全机制**:JXTA提供了加密和身份验证机制,确保数据的安全传输和防止恶意攻击。 在P2P画板程序中,JXTA的这些特性被充分利用。例如,通过发现服务,新加入的客户端可以快速找到其他在线用户;通过发布/订阅...