`

JXTA中通过身份认证来加入“群”(三)

阅读更多

本文是接前面两篇,结束本篇就完成密码对等组创建,发现及加入的过程。

发现一个对等组在以前关于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中通过身份认证来加入“群””的全部过程完成。代码也已经全部共享。

1
1
分享到:
评论

相关推荐

    JXTA JXTA.jar

    jxta.jar p2p jxta.jar p2p jxta.jar p2p

    精通JXTA 。JXTAShell

    本书是一本介绍JXTA的书籍。主要内容包括:JXTA简介、JXTAShell使用说明、开发JXTA应用程序实例、JXTA管道及安全等。

    JXTA经典JXTA经典

    JXTA目前的版本已经是2.5了,同以前的2.0、2.1之类的差别非常大,因此网络上2002年以前的文章,除了是阐述JXTA技术的概念类的文章可以学习外,具体开发类的就没有多大价值。 现将2.0版本和2.5版本同时上传,供大家...

    Mastering JXTA书中的源代码

    Mastering JXTA 书中的源代码,可以学习如何使用JXTA编程。对初学者很有帮助。

    jxta运行的所有jar包

    jxta运行环境所需要的所有jar包 /files/JXTA_Demo/lib/jxta.jar /files/JXTA_Demo/lib/beepcore.jar /files/JXTA_Demo/lib/cryptix-asn1.jar /files/JXTA_Demo/lib/cryptix32.jar /files/JXTA_Demo/lib/jxtaptls.jar...

    jxta2.2 开发文档

    jxta2.2 开发文档

    JXTA开发包7

    这是用JXTA开发P2P程序必须用到的组件。是从jxta.org上面下载来的,已经杀毒

    JXTA\jxta-lib-2.4.1.zip

    JXTA\jxta-lib-2.4.1.zip 用来开发p2p应用程序的。

    jxta2.7.zip

    JXTA 2.7,P2P分布式计算框架JXTA。version 2.7。shell 2.5.

    jxta例程

    jxta的一些经典程序

    精通JXTA --本书是一本介绍JXTA的书籍

    精通JXTA 本书是一本介绍JXTA的书籍。主要内容包括:JXTA简介、JXTAShell使用说明、开发JXTA应用程序实例、JXTA管道及安全等。

    JXTA开发包1

    这是用JXTA开发P2P程序必须用到的组件。是从jxta.org上面下载来的,已经杀毒

    JXTA-JavaP2P网络编程技术

    资源名称:JXTA-Java P2P网络编程技术内容简介:JXTA是美国Sun公司在Java领域里推出的新技术,目的是为P2P(Peer-to-Peer)的网络应用开发提供一个统一的平台。而且为了鼓励和支持该技术的发展,JXTA项目采用了开放...

    JXTA 2.5 - Programming Guide

    Jxta,java的P2P开发教程,了解Jxta技术的核心部分

    jxta2.0协议_CN

    了解jxta的六层核心协议

    最新的JXTA2.5 API帮助文档

    chm格式的最新的JXTA2.5 API帮助文档

    jxta-shell-2.4.zip

    jxta shell 是体验jxta 的最好利器

    jxta远程教学p2p技术

    远程教学 P2P jxta java 远程教学 源代码 jxta远程教学p2p技术,一个很好的P2P例子

    JXTA--P2pSocket.rar

    本资源用JAVA编写了JXTA的PIPE通信过程

Global site tag (gtag.js) - Google Analytics