让你的JXTA应用更加安全.建立真正你自己的私有的组!

发布时间:2025-12-10 11:50:17 浏览次数:3

在JXTA应用中有对等组的概念,当你加入了对等组之后.你在这个对等组内发布的信息就只有这个组的成员才能收到,所谓的成员资格服务^_^.(差不多这个意思吧.不完全对.)
但是你不能建立你自己的应用中所私有的组的话.那么别人通过搜索 * 匹配来得到你的组通告就可以加入你建立的对等组.如果在你告诉了我你自己的应用中组的名字的话.我就可以自己写一个应用来加入你的组进行任意的破坏.^_^.
那么不就很不安全了吗?应用的维护管理也太不方便了.
虽然我之前写过哪个关于通过认证加入对等组的文章,但是哪个就是不安全.
其实可以通过建立ModuleImplAdvertisement 来为你的对等组增加帐号密码的认证

代码如下:

    private ModuleImplAdvertisement createPasswdMembershipPeerGroupModuleImplAdv(PeerGroup rootPeerGroup) {
        ModuleImplAdvertisement allPurposePeerGroupImplAdv=null;
        try {
            allPurposePeerGroupImplAdv=rootPeerGroup.getAllPurposePeerGroupImplAdvertisement();
        } catch (java.lang.Exception e) {
            System.exit(1);
        }
        ModuleImplAdvertisement passwdMembershipPeerGroupModuleImplAdv=allPurposePeerGroupImplAdv;
        ModuleImplAdvertisement passwdMembershipServiceModuleImplAdv=null;
        StdPeerGroupParamAdv passwdMembershipPeerGroupParamAdv=null;

        try {
            passwdMembershipPeerGroupParamAdv =
                new StdPeerGroupParamAdv(allPurposePeerGroupImplAdv.getParam());
        } catch (net.jxta.exception.PeerGroupException e) {
            System.exit(1);
        }

        Hashtable allPurposePeerGroupServicesHashtable = passwdMembershipPeerGroupParamAdv.getServices();
        Enumeration allPurposePeerGroupServicesEnumeration = allPurposePeerGroupServicesHashtable.keys();
        boolean membershipServiceFound=false;
        while ((!membershipServiceFound) && (allPurposePeerGroupServicesEnumeration.hasMoreElements())) {
            Object allPurposePeerGroupServiceID = allPurposePeerGroupServicesEnumeration.nextElement();
            if (allPurposePeerGroupServiceID.equals(PeerGroup.membershipClassID)) {
                ModuleImplAdvertisement allPurposePeerGroupMemershipServiceModuleImplAdv= (ModuleImplAdvertisement) allPurposePeerGroupServicesHashtable.get(allPurposePeerGroupServiceID);
                passwdMembershipServiceModuleImplAdv=this.createPasswdMembershipServiceModuleImplAdv(allPurposePeerGroupMemershipServiceModuleImplAdv);
                allPurposePeerGroupServicesHashtable.remove(allPurposePeerGroupServiceID);
                allPurposePeerGroupServicesHashtable.put(PeerGroup.membershipClassID,passwdMembershipServiceModuleImplAdv);
                membershipServiceFound=true;

                passwdMembershipPeerGroupModuleImplAdv.setParam((Element) passwdMembershipPeerGroupParamAdv.getDocument(new MimeMediaType("text/xml")));

                if (!passwdMembershipPeerGroupModuleImplAdv.getModuleSpecID().equals(PeerGroup.allPurposePeerGroupSpecID)) {
                    passwdMembershipPeerGroupModuleImplAdv.setModuleSpecID(IDFactory.newModuleSpecID(passwdMembershipPeerGroupModuleImplAdv.getModuleSpecID().getBaseClass()));
                } else {
                    ID passwdGrpModSpecID= ID.nullID;
                    try {
                        passwdGrpModSpecID = IDFactory.fromURL(new URL("urn","","jxta:uuid-"+"DeadBeefDeafBabaFeedBabe00000001" +"04" +"06" ) );
                    } catch (java.net.MalformedURLException e) {}
                    catch (java.net.UnknownServiceException ee) {}
                    passwdMembershipPeerGroupModuleImplAdv.setModuleSpecID((ModuleSpecID) passwdGrpModSpecID);
                } 
                membershipServiceFound=true;
            } 
        }

        return passwdMembershipPeerGroupModuleImplAdv;
    }

    private  ModuleImplAdvertisement createPasswdMembershipServiceModuleImplAdv( ModuleImplAdvertisement allPurposePeerGroupMemershipServiceModuleImplAdv) {
        ModuleImplAdvertisement passwdMembershipServiceModuleImplAdv = (ModuleImplAdvertisement) AdvertisementFactory.newAdvertisement(ModuleImplAdvertisement.getAdvertisementType());
        passwdMembershipServiceModuleImplAdv.setModuleSpecID(PasswdMembershipService.passwordMembershipSpecID);
        passwdMembershipServiceModuleImplAdv.setCode(PasswdMembershipService.class.getName());
        passwdMembershipServiceModuleImplAdv.setDescription(" Module Impl Advertisement for the PasswdMembership Service");
        passwdMembershipServiceModuleImplAdv.setCompat(allPurposePeerGroupMemershipServiceModuleImplAdv.getCompat());
        passwdMembershipServiceModuleImplAdv.setUri(allPurposePeerGroupMemershipServiceModuleImplAdv.getUri());
        passwdMembershipServiceModuleImplAdv.setProvider(allPurposePeerGroupMemershipServiceModuleImplAdv.getProvider());
        return passwdMembershipServiceModuleImplAdv;
    }
好了.之后你就可以利用这个ModuleImplAdvertisement 来建立你的应用中专用的对等组了.

PS:关于如何让JXTA在不同的网络中进行通讯的问题,虽然JXTA里面已经说明了自己有这样的能力可以做到.但是到底是如何实现呢? 下次再说 ^_^

转载于:https://www.cnblogs.com/TtTiCk/archive/2006/08/30/490678.html

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477