⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleaclaccessservice.java

📁 jxta平台的开发包
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    throw new IllegalArgumentException( "Unusable ID in advertisement: " + elem.getTextValue() );                } catch ( ClassCastException badID ) {                    throw new IllegalArgumentException( "Id is not a group id: " + elem.getTextValue() );                }                return true;            }                        if( elem.getName().equals("Operation")) {                op = elem.getTextValue();                return true;            }                        if( elem.getName().equals("Offerer")) {                try {                    offerer = source.getPeerGroup().getMembershipService().makeCredential( elem );                } catch( Throwable failed ) {                    throw new IllegalArgumentException( "Offerer credential could not be constructed" + failed );                }                return true;            }                        // element was not handled            return false;        }                /**         *  Intialize from a portion of a structured document.         **/        protected void initialize( Element root ) {                        if( !TextElement.class.isInstance( root ) )  {                throw new IllegalArgumentException( getClass().getName() + " only supports TextElement" );            }                        TextElement doc = (TextElement) root;                        String typedoctype = "";            if( root instanceof Attributable ) {                Attribute itsType = ((Attributable)root).getAttribute( "type" );                if( null != itsType ) {                    typedoctype = itsType.getValue();                }            }                        String doctype = doc.getName();                        if( !doctype.equals("jxta:SimpleACLOp") && !typedoctype.equals("jxta:SimpleACLOp") ) {                throw new IllegalArgumentException( "Could not construct : "                + getClass().getName() + "from doc containing a " + doc.getName() );            }                        Enumeration elements = doc.getChildren();                        while (elements.hasMoreElements()) {                TextElement elem = (TextElement) elements.nextElement();                                if( !handleElement( elem ) ) {                    if (LOG.isEnabledFor(Level.WARN)) {                        LOG.warn("Unhandleded element '" + elem.getName() + "' in " + doc.getName() );                    }                };            }                        // sanity check time!                        if( null == op ) {                throw new IllegalArgumentException( "operation was never initialized." );            }                        if( null == offerer ) {                throw new IllegalArgumentException( "offerer was never initialized." );            }        }    }        /**     *  The peer group we are working for.     **/    PeerGroup group;        /**     *  Implementation advertisement for this instance.     **/    ModuleImplAdvertisement implAdvertisement;        /**     *  The ACLs we are supporting.     **/    private final Map<String,Set<String>> ACLs = new HashMap<String,Set<String>>();        /**     *  The default constructor     **/    public SimpleACLAccessService() {    }              /**     * {@inheritDoc}     **/    public void init( PeerGroup group, ID assignedID, Advertisement implAdv ) throws PeerGroupException {        this.group = group;        implAdvertisement = (ModuleImplAdvertisement) implAdv;                if (LOG.isEnabledFor(Level.INFO)) {            StringBuffer configInfo = new StringBuffer( "Configuring Access Service : " + assignedID );                        configInfo.append( "\n\tImplementation:" );            configInfo.append( "\n\t\tImpl Description: " + implAdvertisement.getDescription() );            configInfo.append( "\n\t\tImpl URI : " + implAdvertisement.getUri() );            configInfo.append( "\n\t\tImpl Code : " + implAdvertisement.getCode() );                        configInfo.append( "\n\tGroup Params:" );            configInfo.append( "\n\t\tGroup: " + group.getPeerGroupName() );            configInfo.append( "\n\t\tGroup ID: " + group.getPeerGroupID() );            configInfo.append( "\n\t\tPeer ID: " + group.getPeerID() );                        LOG.info( configInfo );        }                PeerGroupAdvertisement configAdv = (PeerGroupAdvertisement)        group.getPeerGroupAdvertisement();                TextElement myParam = (TextElement) configAdv.getServiceParam(assignedID);                if( null == myParam ) {            throw new PeerGroupException( "parameters for group access controls missing." );        }                Enumeration allACLS = myParam.getChildren();                while( allACLS.hasMoreElements() ) {            TextElement anACL = (TextElement) allACLS.nextElement();                        if( !anACL.getName().equals( "perm" ) ) {                continue;            }                        String etcPasswd = (String) anACL.getTextValue( );                        int nextDelim = etcPasswd.indexOf( ':' );            if( -1 == nextDelim ) {                continue;            }                        String operation = etcPasswd.substring( 0, nextDelim ).trim();                        if( "<<DEFAULT>>".equals( operation ) ) {                operation = null;            }                        String identities = etcPasswd.substring( nextDelim + 1 );            Set allowed = new HashSet();                        StringTokenizer eachIdentity = new StringTokenizer(identities, "," );                        while ( eachIdentity.hasMoreTokens()  ) {                String anIdentity = eachIdentity.nextToken().trim();                                if( "<<ALL>>".equals( anIdentity ) ) {                    anIdentity = null;                }                                allowed.add( anIdentity );            }                        if (LOG.isEnabledFor(Level.DEBUG)) {                LOG.debug( "Adding operation  : '" + ((null == operation) ? "<<DEFAULT>>" : operation ) + "' with " + allowed.size() + " identities." );            }                        ACLs.put( operation, allowed );        }    }        /**     * {@inheritDoc}     **/    public int startApp(String[] args) {        return 0;    }        /**     * {@inheritDoc}     **/    public void stopApp() {    }        /**     * {@inheritDoc}     **/    public Advertisement getImplAdvertisement() {        return implAdvertisement;    }        /**     * {@inheritDoc}     **/    public Service getInterface() {        return this;    }        /**     * {@inheritDoc}     **/    public AccessResult doAccessCheck( PrivilegedOperation op, Credential cred ) {        if( (null != cred) && !cred.isValid() ) {            return AccessResult.DISALLOWED;        }                if( (null != op) && !op.isValid() ) {            return AccessResult.DISALLOWED;        }                Set<String> allowed = ACLs.get( (null != op) ? op.getSubject() : null );                // do we know this operation?        if( null == allowed ) {            // try the default permission            allowed = ACLs.get( null );                        if( null == allowed ) {                return AccessResult.DISALLOWED;            }        }                String credSubject = (null != cred) ? cred.getSubject().toString() : null;                return (allowed.contains( credSubject ) || allowed.contains( null )) ? AccessResult.PERMITTED : AccessResult.DISALLOWED;    }        /**     * {@inheritDoc}     **/    public PrivilegedOperation newPrivilegedOperation(Object subject, Credential offerer) {        if( !(subject instanceof String) ) {            throw new IllegalArgumentException( getClass().getName() + " only supports String subjects." );        }                if( !offerer.isValid() ) {            throw new IllegalArgumentException( "offerer is not a valid credential" );        }                return new SimpleACLOperation( this, (String) subject, offerer );    }        /**     * {@inheritDoc}     **/    public PrivilegedOperation newPrivilegedOperation(Element source) {        return new SimpleACLOperation( this, source );    }        /**     * {@inheritDoc}     **/    PeerGroup getPeerGroup() {        return group;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -