apereo/cas · warning

No RADIUS address is defined. RADIUS support will be…

Error message

No RADIUS address is defined. RADIUS support will be disabled.

What it means

The RADIUS auto-configuration registers the RADIUS authentication handler only when client IP addresses are configured. When getClientIps returns empty (no cas.authn.radius.client server addresses defined), it logs this warning and registers nothing, disabling RADIUS authentication entirely.

Solutions

  1. Define at least one RADIUS server address, e.g. cas.authn.radius.client.server[0].address=radius.example.org:1812.
  2. Verify the properties namespace is cas.authn.radius.client.* and the YAML list is correctly indented.
  3. Confirm the environment/secret substitution for the address variable actually resolves to a value.
  4. If RADIUS is not needed, remove the module/dependency instead of leaving it half-configured.

Example fix

# before
cas.authn.radius.client: {}
# after
cas.authn.radius.client.server[0].address=10.0.0.5:1812
cas.authn.radius.client.shared-secret=xxxxxxxx
Defensive patterns

Strategy: validation

Validate before calling

if not config.get('cas.authn.radius.client.server'):
    raise ValueError('cas.authn.radius.client.server[*].address must be defined for RADIUS support')

Prevention

When it happens

Trigger: cas.authn.radius.client has no server entries (empty list of IP/host:port addresses) while the RADIUS support module is active, so the plan configurer has no addresses to build clients from.

Common situations: RADIUS dependency added but properties never set; properties under the wrong prefix (authn.radius vs radius); YAML list indentation errors producing an empty list; using an env var that resolves to empty.

Understand the failure class

Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.

Related errors


AI-assisted analysis of apereo/cas@e7288fc434 (2026-09-08). Data as JSON: /api/errors/6253769d4b749d59. Report an issue: GitHub.

Appendix: source

Thrown at support/cas-server-support-radius/src/main/java/org/apereo/cas/config/CasRadiusAutoConfiguration.java:192

    @ConditionalOnMissingBean(name = "radiusAuthenticationEventExecutionPlanConfigurer")
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    public AuthenticationEventExecutionPlanConfigurer radiusAuthenticationEventExecutionPlanConfigurer(
        final ConfigurableApplicationContext applicationContext,
        final CasConfigurationProperties casProperties,
        @Qualifier("radiusAuthenticationHandler")
        final AuthenticationHandler radiusAuthenticationHandler,
        @Qualifier(PrincipalResolver.BEAN_NAME_PRINCIPAL_RESOLVER)
        final PrincipalResolver defaultPrincipalResolver) {
        return BeanSupplier.of(AuthenticationEventExecutionPlanConfigurer.class)
            .when(CONDITION.given(applicationContext.getEnvironment()))
            .supply(() -> plan -> {
                val ips = getClientIps(casProperties.getAuthn().getRadius().getClient());
                if (!ips.isEmpty()) {
                    plan.registerAuthenticationHandlerWithPrincipalResolver(radiusAuthenticationHandler, defaultPrincipalResolver);
                } else {
                    LOGGER.warn("No RADIUS address is defined. RADIUS support will be disabled.");
                }
            })
            .otherwiseProxy()
            .get();
    }

    @ConditionalOnMissingBean(name = "radiusPasswordPolicyConfiguration")
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    public PasswordPolicyContext radiusPasswordPolicyConfiguration() {
        return new PasswordPolicyContext();
    }

    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    @Bean
    @ConditionalOnMissingBean(name = "radiusAccessChallengedMultifactorAuthenticationTrigger")
    public MultifactorAuthenticationTrigger radiusAccessChallengedMultifactorAuthenticationTrigger(
        final CasConfigurationProperties casProperties,

View on GitHub (pinned to e7288fc434)