public static RadiusAuthenticator getAuthProtocol(String protocolName) {
        RadiusAuthenticator auth;
        String[] args = null;
        int i;

        if ((i = protocolName.indexOf(':')) > 0) {
            if (i < protocolName.length()) {
                args = protocolName.substring(i + 1).split(":");
            }
            protocolName = protocolName.substring(0, i);
        }

        protocolName = protocolName.toLowerCase(Locale.ENGLISH);

        Class<?> c = authenticators.get(protocolName);

        if (c == null) {
            return null;
        }

        try {
            auth = (RadiusAuthenticator) c.getConstructor().newInstance();
        } catch (final Exception e) {
            RadiusLog.error("Invalid auth protocol", e);
            return null;
        }

        if (args != null) {
            var elements = new HashMap<String, PropertyDescriptor>();
            var clazz = auth.getClass();
            PropertyDescriptor[] props;
            try {
                props = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
            } catch (final Exception e) {
                RadiusLog.error("Could not instantiate authenticator " + protocolName, e);
                return auth;
            }
            for (var pd : props) {
                var writeMethod = pd.getWriteMethod();
                if (writeMethod != null) {
                    elements.put(pd.getName(), pd);
                }
            }
            for (val arg : args) {
                val eq = arg.indexOf('=');
                if (eq > 0) {
                    var name = arg.substring(0, eq);
                    var value = arg.substring(eq + 1);

                    var pd = elements.get(name);
                    var writeMethod = pd.getWriteMethod();

                    if (writeMethod == null) {
                        RadiusLog.error("Authenticator " + protocolName + " does not have a writable attribute " + name);
                    } else {
                        Object valueObject = value;
                        var cType = pd.getPropertyType();
                        if (cType == Boolean.class) {
                            valueObject = Boolean.valueOf(value);
                        } else if (cType == Integer.class) {
                            valueObject = Integer.valueOf(value);
                        }
                        try {
                            writeMethod.invoke(auth, valueObject);
                        } catch (final Exception e) {
                            RadiusLog.error("Error setting attribute " + name + " for authenticator " + protocolName, e);
                        }
                    }
                }
            }
        }
        return auth;
    }
Registration of supported RadiusAuthenticator protocols

@param name The authentication protocol name
@param c    The RadiusAuthenticator class that implements the protocol
support/cas-server-support-radius-core/src/main/java/net/jradius/client/RadiusClient.java