{"record":{"id":"9e4875596610948e","repo":"apereo/cas","slug":"no-storage-service-is-configured-to-handle-the-acc","errorCode":null,"errorMessage":"No storage service is configured to handle the account update and password service operations. Password management functionality will have no effect and will be disabled until a storage service is configured. To explicitly disable password management, add 'cas.authn.pm.core.enabled=false' to the CAS configuration","messagePattern":"No storage service is configured to handle the account update and password service operations\\. Password management functionality will have no effect and will be disabled until a storage service is configured\\. To explicitly disable password management, add 'cas\\.authn\\.pm\\.core\\.enabled=false' to the CAS configuration","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"support/cas-server-support-pm/src/main/java/org/apereo/cas/config/CasPasswordManagementAutoConfiguration.java","lineNumber":190,"sourceCode":"            final CasConfigurationProperties casProperties,\n            @Qualifier(\"passwordManagementCipherExecutor\")\n            final CipherExecutor passwordManagementCipherExecutor,\n            @Qualifier(PasswordHistoryService.BEAN_NAME)\n            final PasswordHistoryService passwordHistoryService) {\n            val pm = casProperties.getAuthn().getPm();\n            if (pm.getCore().isEnabled()) {\n                val plans = applicationContext.getBeansOfType(PasswordManagementExecutionPlan.class).values();\n                val registeredServices = plans\n                    .stream()\n                    .filter(BeanSupplier::isNotProxy)\n                    .sorted(AnnotationAwareOrderComparator.INSTANCE)\n                    .map(PasswordManagementExecutionPlan::registerPasswordManagementService)\n                    .filter(BeanSupplier::isNotProxy)\n                    .toList();\n                if (!registeredServices.isEmpty()) {\n                    return new ChainingPasswordManagementService(registeredServices);\n                }\n                LOGGER.warn(\"No storage service is configured to handle the account update and password service operations. \"\n                    + \"Password management functionality will have no effect and will be disabled until a storage service is configured. \"\n                    + \"To explicitly disable password management, add 'cas.authn.pm.core.enabled=false' to the CAS configuration\");\n            } else {\n                LOGGER.debug(\"Password management is disabled. To enable the password management functionality, \"\n                    + \"add 'cas.authn.pm.core.enabled=true' to the CAS configuration and then configure storage options for account updates\");\n            }\n            return new NoOpPasswordManagementService(passwordManagementCipherExecutor, casProperties);\n        }\n\n        @Bean\n        @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)\n        @ConditionalOnMissingBean(name = \"groovyPasswordChangeService\")\n        @ConditionalOnMissingGraalVMNativeImage\n        public PasswordManagementExecutionPlan groovyPasswordChangeService(\n            final ConfigurableApplicationContext applicationContext,\n            @Qualifier(\"passwordManagementCipherExecutor\")\n            final CipherExecutor passwordManagementCipherExecutor,\n            @Qualifier(PasswordHistoryService.BEAN_NAME)","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/apereo/cas/blob/e7288fc434b4f4505b8452e1a57e8fb3111bb863/support/cas-server-support-pm/src/main/java/org/apereo/cas/config/CasPasswordManagementAutoConfiguration.java#L172-L208","documentation":"CAS logs this warning when password management is enabled (cas.authn.pm.core.enabled=true) but no PasswordManagementService beans (storage backends such as JDBC/Mongo/LDAP for account updates) were registered in the execution plan. The auto-configuration falls back to a chain that does nothing, so password management is effectively disabled.","triggerScenarios":"cas.authn.pm.core.enabled=true while no cas.authn.pm.* storage configuration (e.g. cas.authn.pm.jdbc, cas.authn.pm.mongo, cas.authn.pm.ldap) is present, so no PasswordManagementService beans exist to register.","commonSituations":"Enabling the feature flag but forgetting to add the JDBC/Mongo/LDAP pm module and its storage settings; misconfigured storage properties causing the backend bean to silently not register; wrong feature module not on classpath.","solutions":["Add a storage module and configure it, e.g. cas.authn.pm.jdbc[0].url/user/password with the jdbc driver dependency.","If password management is not wanted, set cas.authn.pm.core.enabled=false to silence the warning and explicitly disable.","Verify the chosen pm storage module jar is on the classpath (overlay dependency) so its auto-configuration registers a PasswordManagementService.","Check startup logs for the backend's own configuration warnings indicating why its beans did not register."],"exampleFix":"# before\ncas.authn.pm.core.enabled=true\n# after\ncas.authn.pm.core.enabled=true\ncas.authn.pm.jdbc[0].url=jdbc:hsqldb:mem:cas-pm\ncas.authn.pm.jdbc[0].user=sa\ncas.authn.pm.jdbc[0].password=sa\ncas.authn.pm.jdbc[0].driver-class-name=org.hsqldb.jdbcDriver","handlingStrategy":"validation","validationCode":"# check before enabling\nassert cas_properties.get('cas.authn.pm.core.enabled') != 'true' or any(k.startswith('cas.authn.pm.jdbc') or k.startswith('cas.authn.pm.mongo') or k.startswith('cas.authn.pm.ldap') for k in cas_properties)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pair cas.authn.pm.core.enabled=true with a concrete storage block","Smoke-test startup and grep logs for the 'No storage service' warning in CI","Set enabled=false explicitly when PM is not used"],"tags":["password-management","configuration","missing-bean"],"backgroundTag":"missing-required-config","analyzedSha":"e7288fc434b4f4505b8452e1a57e8fb3111bb863","analyzedAt":"2026-09-08T15:39:16.015Z","contentChangedAt":"2026-09-08T15:39:16.015Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}