让你的JXTA应用更加安全.建立真正你自己的私有的组!
在JXTA应用中有对等组的概念,当你加入了对等组之后.你在这个对等组内发布的信息就只有这个组的成员才能收到,所谓的成员资格服务^_^.(差不多这个意思吧.不完全对.)
但是你不能建立你自己的应用中所私有的组的话.那么别人通过搜索 * 匹配来得到你的组通告就可以加入你建立的对等组.如果在你告诉了我你自己的应用中组的名字的话.我就可以自己写一个应用来加入你的组进行任意的破坏.^_^.
那么不就很不安全了吗?应用的维护管理也太不方便了.
虽然我之前写过哪个关于通过认证加入对等组的文章,但是哪个就是不安全.
其实可以通过建立ModuleImplAdvertisement 来为你的对等组增加帐号密码的认证
代码如下:
 private ModuleImplAdvertisement createPasswdMembershipPeerGroupModuleImplAdv(PeerGroup rootPeerGroup) {
    private ModuleImplAdvertisement createPasswdMembershipPeerGroupModuleImplAdv(PeerGroup rootPeerGroup) { ModuleImplAdvertisement allPurposePeerGroupImplAdv=null;
        ModuleImplAdvertisement allPurposePeerGroupImplAdv=null; try {
        try { allPurposePeerGroupImplAdv=rootPeerGroup.getAllPurposePeerGroupImplAdvertisement();
            allPurposePeerGroupImplAdv=rootPeerGroup.getAllPurposePeerGroupImplAdvertisement(); } catch (java.lang.Exception e) {
        } catch (java.lang.Exception e) { System.exit(1);
            System.exit(1); }
        } ModuleImplAdvertisement passwdMembershipPeerGroupModuleImplAdv=allPurposePeerGroupImplAdv;
        ModuleImplAdvertisement passwdMembershipPeerGroupModuleImplAdv=allPurposePeerGroupImplAdv; ModuleImplAdvertisement passwdMembershipServiceModuleImplAdv=null;
        ModuleImplAdvertisement passwdMembershipServiceModuleImplAdv=null; StdPeerGroupParamAdv passwdMembershipPeerGroupParamAdv=null;
        StdPeerGroupParamAdv passwdMembershipPeerGroupParamAdv=null;
 try {
        try { passwdMembershipPeerGroupParamAdv =
            passwdMembershipPeerGroupParamAdv = new StdPeerGroupParamAdv(allPurposePeerGroupImplAdv.getParam());
                new StdPeerGroupParamAdv(allPurposePeerGroupImplAdv.getParam()); } catch (net.jxta.exception.PeerGroupException e) {
        } catch (net.jxta.exception.PeerGroupException e) { System.exit(1);
            System.exit(1); }
        }
 Hashtable allPurposePeerGroupServicesHashtable = passwdMembershipPeerGroupParamAdv.getServices();
        Hashtable allPurposePeerGroupServicesHashtable = passwdMembershipPeerGroupParamAdv.getServices(); Enumeration allPurposePeerGroupServicesEnumeration = allPurposePeerGroupServicesHashtable.keys();
        Enumeration allPurposePeerGroupServicesEnumeration = allPurposePeerGroupServicesHashtable.keys(); boolean membershipServiceFound=false;
        boolean membershipServiceFound=false; while ((!membershipServiceFound) && (allPurposePeerGroupServicesEnumeration.hasMoreElements())) {
        while ((!membershipServiceFound) && (allPurposePeerGroupServicesEnumeration.hasMoreElements())) { Object allPurposePeerGroupServiceID = allPurposePeerGroupServicesEnumeration.nextElement();
            Object allPurposePeerGroupServiceID = allPurposePeerGroupServicesEnumeration.nextElement(); if (allPurposePeerGroupServiceID.equals(PeerGroup.membershipClassID)) {
            if (allPurposePeerGroupServiceID.equals(PeerGroup.membershipClassID)) { ModuleImplAdvertisement allPurposePeerGroupMemershipServiceModuleImplAdv= (ModuleImplAdvertisement) allPurposePeerGroupServicesHashtable.get(allPurposePeerGroupServiceID);
                ModuleImplAdvertisement allPurposePeerGroupMemershipServiceModuleImplAdv= (ModuleImplAdvertisement) allPurposePeerGroupServicesHashtable.get(allPurposePeerGroupServiceID); passwdMembershipServiceModuleImplAdv=this.createPasswdMembershipServiceModuleImplAdv(allPurposePeerGroupMemershipServiceModuleImplAdv);
                passwdMembershipServiceModuleImplAdv=this.createPasswdMembershipServiceModuleImplAdv(allPurposePeerGroupMemershipServiceModuleImplAdv); allPurposePeerGroupServicesHashtable.remove(allPurposePeerGroupServiceID);
                allPurposePeerGroupServicesHashtable.remove(allPurposePeerGroupServiceID); allPurposePeerGroupServicesHashtable.put(PeerGroup.membershipClassID,passwdMembershipServiceModuleImplAdv);
                allPurposePeerGroupServicesHashtable.put(PeerGroup.membershipClassID,passwdMembershipServiceModuleImplAdv); membershipServiceFound=true;
                membershipServiceFound=true;
 passwdMembershipPeerGroupModuleImplAdv.setParam((Element) passwdMembershipPeerGroupParamAdv.getDocument(new MimeMediaType("text/xml")));
                passwdMembershipPeerGroupModuleImplAdv.setParam((Element) passwdMembershipPeerGroupParamAdv.getDocument(new MimeMediaType("text/xml")));
 if (!passwdMembershipPeerGroupModuleImplAdv.getModuleSpecID().equals(PeerGroup.allPurposePeerGroupSpecID)) {
                if (!passwdMembershipPeerGroupModuleImplAdv.getModuleSpecID().equals(PeerGroup.allPurposePeerGroupSpecID)) { passwdMembershipPeerGroupModuleImplAdv.setModuleSpecID(IDFactory.newModuleSpecID(passwdMembershipPeerGroupModuleImplAdv.getModuleSpecID().getBaseClass()));
                    passwdMembershipPeerGroupModuleImplAdv.setModuleSpecID(IDFactory.newModuleSpecID(passwdMembershipPeerGroupModuleImplAdv.getModuleSpecID().getBaseClass())); } else {
                } else { ID passwdGrpModSpecID= ID.nullID;
                    ID passwdGrpModSpecID= ID.nullID; try {
                    try { passwdGrpModSpecID = IDFactory.fromURL(new URL("urn","","jxta:uuid-"+"DeadBeefDeafBabaFeedBabe00000001" +"04" +"06" ) );
                        passwdGrpModSpecID = IDFactory.fromURL(new URL("urn","","jxta:uuid-"+"DeadBeefDeafBabaFeedBabe00000001" +"04" +"06" ) ); } catch (java.net.MalformedURLException e) {}
                    } catch (java.net.MalformedURLException e) {} catch (java.net.UnknownServiceException ee) {}
                    catch (java.net.UnknownServiceException ee) {} passwdMembershipPeerGroupModuleImplAdv.setModuleSpecID((ModuleSpecID) passwdGrpModSpecID);
                    passwdMembershipPeerGroupModuleImplAdv.setModuleSpecID((ModuleSpecID) passwdGrpModSpecID); }
                }  membershipServiceFound=true;
                membershipServiceFound=true; }
            }  }
        }
 return passwdMembershipPeerGroupModuleImplAdv;
        return passwdMembershipPeerGroupModuleImplAdv; }
    }
 private  ModuleImplAdvertisement createPasswdMembershipServiceModuleImplAdv( ModuleImplAdvertisement allPurposePeerGroupMemershipServiceModuleImplAdv) {
    private  ModuleImplAdvertisement createPasswdMembershipServiceModuleImplAdv( ModuleImplAdvertisement allPurposePeerGroupMemershipServiceModuleImplAdv) { ModuleImplAdvertisement passwdMembershipServiceModuleImplAdv = (ModuleImplAdvertisement) AdvertisementFactory.newAdvertisement(ModuleImplAdvertisement.getAdvertisementType());
        ModuleImplAdvertisement passwdMembershipServiceModuleImplAdv = (ModuleImplAdvertisement) AdvertisementFactory.newAdvertisement(ModuleImplAdvertisement.getAdvertisementType()); passwdMembershipServiceModuleImplAdv.setModuleSpecID(PasswdMembershipService.passwordMembershipSpecID);
        passwdMembershipServiceModuleImplAdv.setModuleSpecID(PasswdMembershipService.passwordMembershipSpecID); passwdMembershipServiceModuleImplAdv.setCode(PasswdMembershipService.class.getName());
        passwdMembershipServiceModuleImplAdv.setCode(PasswdMembershipService.class.getName()); passwdMembershipServiceModuleImplAdv.setDescription(" Module Impl Advertisement for the PasswdMembership Service");
        passwdMembershipServiceModuleImplAdv.setDescription(" Module Impl Advertisement for the PasswdMembership Service"); passwdMembershipServiceModuleImplAdv.setCompat(allPurposePeerGroupMemershipServiceModuleImplAdv.getCompat());
        passwdMembershipServiceModuleImplAdv.setCompat(allPurposePeerGroupMemershipServiceModuleImplAdv.getCompat()); passwdMembershipServiceModuleImplAdv.setUri(allPurposePeerGroupMemershipServiceModuleImplAdv.getUri());
        passwdMembershipServiceModuleImplAdv.setUri(allPurposePeerGroupMemershipServiceModuleImplAdv.getUri()); passwdMembershipServiceModuleImplAdv.setProvider(allPurposePeerGroupMemershipServiceModuleImplAdv.getProvider());
        passwdMembershipServiceModuleImplAdv.setProvider(allPurposePeerGroupMemershipServiceModuleImplAdv.getProvider()); return passwdMembershipServiceModuleImplAdv;
        return passwdMembershipServiceModuleImplAdv; }
    }好了.之后你就可以利用这个ModuleImplAdvertisement 来建立你的应用中专用的对等组了.
PS:关于如何让JXTA在不同的网络中进行通讯的问题,虽然JXTA里面已经说明了自己有这样的能力可以做到.但是到底是如何实现呢? 下次再说 ^_^
 
                    
                


 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号