connector/src/main/java/org/jboss/as/connector/security/ElytronCallbackHandler.java
public void handle(javax.security.auth.callback.Callback[] callbacks) throws UnsupportedCallbackException, IOException {
        if (SUBSYSTEM_RA_LOGGER.isTraceEnabled())
            SUBSYSTEM_RA_LOGGER.elytronHandlerHandle(Arrays.toString(callbacks));

        // work wrapper calls the callback handler a second time with default callback values after the handler was invoked
        // by the RA. We must check if the execution subject already contains an identity and allow for replacement of the
        // identity with values found in the default callbacks only if the subject has no identity yet or if the identity
        // is the anonymous one.
        if (this.executionSubject != null) {
            final SecurityIdentity subjectIdentity = this.getPrivateCredential(this.executionSubject, SecurityIdentity.class);
            if (subjectIdentity != null && !subjectIdentity.isAnonymous()) {
                return;
            }
        }

        if (callbacks != null && callbacks.length > 0)
        {
            if (this.mappings != null && this.mappings.isMappingRequired())
            {
                callbacks = this.mappings.mapCallbacks(callbacks);
            }

            GroupPrincipalCallback groupPrincipalCallback = null;
            CallerPrincipalCallback callerPrincipalCallback = null;
            PasswordValidationCallback passwordValidationCallback = null;

            for (javax.security.auth.callback.Callback callback : callbacks) {
                if (callback instanceof GroupPrincipalCallback) {
                    groupPrincipalCallback = (GroupPrincipalCallback) callback;
                    if (this.executionSubject == null) {
                        this.executionSubject = groupPrincipalCallback.getSubject();
                    } else if (!this.executionSubject.equals(groupPrincipalCallback.getSubject())) {
                        // TODO merge the contents of the subjects?
                    }
                } else if (callback instanceof CallerPrincipalCallback) {
                    callerPrincipalCallback = (CallerPrincipalCallback) callback;
                    if (this.executionSubject == null) {
                        this.executionSubject = callerPrincipalCallback.getSubject();
                    } else if (!this.executionSubject.equals(callerPrincipalCallback.getSubject())) {
                        // TODO merge the contents of the subjects?
                    }
                } else if (callback instanceof PasswordValidationCallback) {
                    passwordValidationCallback = (PasswordValidationCallback) callback;
                    if (this.executionSubject == null) {
                        this.executionSubject = passwordValidationCallback.getSubject();
                    } else if (!this.executionSubject.equals(passwordValidationCallback.getSubject())) {
                        // TODO merge the contents of the subjects?
                    }
                } else {
                    throw new UnsupportedCallbackException(callback);
                }
            }
            this.handleInternal(callerPrincipalCallback, groupPrincipalCallback, passwordValidationCallback);
        }
    }
public void handle(javax.security.auth.callback.Callback[] callbacks) throws UnsupportedCallbackException, IOException {
        if (SUBSYSTEM_RA_LOGGER.isTraceEnabled())
            SUBSYSTEM_RA_LOGGER.elytronHandlerHandle(Arrays.toString(callbacks));

        // work wrapper calls the callback handler a second time with default callback values after the handler was invoked
        // by the RA. We must check if the execution subject already contains an identity and allow for replacement of the
        // identity with values found in the default callbacks only if the subject has no identity yet or if the identity
        // is the anonymous one.
        if (this.executionSubject != null) {
            final SecurityIdentity subjectIdentity = this.getPrivateCredential(this.executionSubject, SecurityIdentity.class);
            if (subjectIdentity != null && !subjectIdentity.isAnonymous()) {
                return;
            }
        }

        if (callbacks != null && callbacks.length > 0)
        {
            if (this.mappings != null && this.mappings.isMappingRequired())
            {
                callbacks = this.mappings.mapCallbacks(callbacks);
            }

            GroupPrincipalCallback groupPrincipalCallback = null;
            CallerPrincipalCallback callerPrincipalCallback = null;
            PasswordValidationCallback passwordValidationCallback = null;

            for (javax.security.auth.callback.Callback callback : callbacks) {
                if (callback instanceof GroupPrincipalCallback) {
                    groupPrincipalCallback = (GroupPrincipalCallback) callback;
                    if (this.executionSubject == null) {
                        this.executionSubject = groupPrincipalCallback.getSubject();
                    } else if (!this.executionSubject.equals(groupPrincipalCallback.getSubject())) {
                        // TODO merge the contents of the subjects?
                    }
                } else if (callback instanceof CallerPrincipalCallback) {
                    callerPrincipalCallback = (CallerPrincipalCallback) callback;
                    if (this.executionSubject == null) {
                        this.executionSubject = callerPrincipalCallback.getSubject();
                    } else if (!this.executionSubject.equals(callerPrincipalCallback.getSubject())) {
                        // TODO merge the contents of the subjects?
                    }
                } else if (callback instanceof PasswordValidationCallback) {
                    passwordValidationCallback = (PasswordValidationCallback) callback;
                    if (this.executionSubject == null) {
                        this.executionSubject = passwordValidationCallback.getSubject();
                    } else if (!this.executionSubject.equals(passwordValidationCallback.getSubject())) {
                        // TODO merge the contents of the subjects?
                    }
                } else {
                    throw new UnsupportedCallbackException(callback);
                }
            }
            this.handleInternal(callerPrincipalCallback, groupPrincipalCallback, passwordValidationCallback);
        }
    }
public void handle ( javax . security . auth . callback . Callback [ ] callbacks ) throws UnsupportedCallbackException , IOException { if ( SUBSYSTEM_RA_LOGGER . isTraceEnabled ( ) ) SUBSYSTEM_RA_LOGGER . elytronHandlerHandle ( Arrays . toString ( callbacks ) ) ; // work wrapper calls the callback handler a second time with default callback values after the handler was invoked // by the RA. We must check if the execution subject already contains an identity and allow for replacement of the // identity with values found in the default callbacks only if the subject has no identity yet or if the identity // is the anonymous one. if ( this . executionSubject != null ) { final SecurityIdentity subjectIdentity = this . getPrivateCredential ( this . executionSubject , SecurityIdentity . class ) ; if ( subjectIdentity != null && ! subjectIdentity . isAnonymous ( ) ) { return ; } } if ( callbacks != null && callbacks . length > 0 ) { if ( this . mappings != null && this . mappings . isMappingRequired ( ) ) { callbacks = this . mappings . mapCallbacks ( callbacks ) ; } GroupPrincipalCallback groupPrincipalCallback = null ; CallerPrincipalCallback callerPrincipalCallback = null ; PasswordValidationCallback passwordValidationCallback = null ; for ( javax . security . auth . callback . Callback callback : callbacks ) { if ( callback instanceof GroupPrincipalCallback ) { groupPrincipalCallback = ( GroupPrincipalCallback ) callback ; if ( this . executionSubject == null ) { this . executionSubject = groupPrincipalCallback . getSubject ( ) ; } else if ( ! this . executionSubject . equals ( groupPrincipalCallback . getSubject ( ) ) ) { // TODO merge the contents of the subjects? } } else if ( callback instanceof CallerPrincipalCallback ) { callerPrincipalCallback = ( CallerPrincipalCallback ) callback ; if ( this . executionSubject == null ) { this . executionSubject = callerPrincipalCallback . getSubject ( ) ; } else if ( ! this . executionSubject . equals ( callerPrincipalCallback . getSubject ( ) ) ) { // TODO merge the contents of the subjects? } } else if ( callback instanceof PasswordValidationCallback ) { passwordValidationCallback = ( PasswordValidationCallback ) callback ; if ( this . executionSubject == null ) { this . executionSubject = passwordValidationCallback . getSubject ( ) ; } else if ( ! this . executionSubject . equals ( passwordValidationCallback . getSubject ( ) ) ) { // TODO merge the contents of the subjects? } } else { throw new UnsupportedCallbackException ( callback ) ; } } this . handleInternal ( callerPrincipalCallback , groupPrincipalCallback , passwordValidationCallback ) ; } }
{@inheritDoc}
{