@Override
    protected Map<String, List<Object>> retrievePersonAttributes(final String principalId,
                                                                 final Credential credential,
                                                                 final Optional<Principal> currentPrincipal,
                                                                 final Map<String, List<Object>> queryAttributes,
                                                                 final Optional<Service> service,
                                                                 final Optional<AuthenticationHandler> handler) throws Throwable {
        val certificate = ((X509CertificateCredential) credential).getCertificate();
        val certificateAttributes = extractPersonAttributes(certificate);
        queryAttributes.putAll(certificateAttributes);
        val attributes = new LinkedHashMap<>(super.retrievePersonAttributes(principalId, credential, currentPrincipal, queryAttributes, service, handler));
        attributes.putAll(certificateAttributes);
        return attributes;
    }
Abstract class in support of multiple resolvers for X509 Certificates.

@author Scott Battaglia
@since 3.0.0
support/cas-server-support-x509-core/src/main/java/org/apereo/cas/adaptors/x509/authentication/principal/AbstractX509PrincipalResolver.java