Hi,
CAS 7.1.0 overlay, I need to override password change implementation, using my own PasswordManagementService.
I basically want to provide my own impl. of
JdbcPasswordManagementConfiguration. See below QuestCasConfiguration,
also defined in META-INF/spring/...AutoImports
org.apereo.cas.config.CasOverlayOverrideConfiguration
org.apereo.cas.config.QuestCasConfiguration
@EnableTransactionManagement(proxyTargetClass =
false)
@EnableConfigurationProperties(CasConfigurationProperties.class)
@Configuration(value =
"QuestCasConfiguration", proxyBeanMethods =
false)
public class QuestCasConfiguration
{
@Bean(name =
"jdbcPasswordChangeService")
public PasswordManagementService
passwordChangeService(
.......................
final PasswordHistoryServicepasswordHistoryService) {
return new QuestJdbcPasswordManagementService(passwordManagementCipherExecutor,
casProperties.getServer().getPrefix(), casProperties.getAuthn().getPm(), jdbcPasswordManagementDataSource,
jdbcPasswordManagementTransactionTemplate, passwordHistoryService,
encoder); <=== this is Not called
}
@Bean(name =
"jdbcPasswordManagementDataSource")
public DataSourcejdbcPasswordManagementDataSource(finalCasConfigurationProperties
casProperties) {
return JpaBeans.newDataSource(casProperties.getAuthn().getJdbc().getQuery().get(0)); <=== this is
called
}
}
the problem is that the two bean methods, one (jdbcPasswordManagementDataSource) is called but the other(passwordChangeService)
is not, not sure why. I set a breakpoint in my class to see how the code is invoked.
This means passwordChangeService is already created somewhere else, but I cannot figure that out, either.
I set a breakpoint in CAS source code:JdbcPasswordManagementConfiguration, I do not see any method stopped during debug when CAS starts up.
what did I miss? here are related logs
2024-05-06 10:49:55,104 DEBUG [restartedMain] [org.springframework.beans.factory.support.DefaultListableBeanFactory] - <Overriding bean definition for bean 'localeResolver' with a different definition: replacing [Root bean: class
[null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration; factoryMethodName=localeResolver;
initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]] with [Root bean: class [null]; scope=refresh; abstract=false;
lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=CasWebAppConfiguration; factoryMethodName=localeResolver; initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [org/apereo/cas/config/CasWebAppConfiguration.class]]>
2024-05-06 10:49:55,107 DEBUG [restartedMain] [org.springframework.beans.factory.support.DefaultListableBeanFactory] - <Overriding bean definition for bean 'jdbcPasswordManagementDataSource' with a different definition: replacing [Root bean: class [null]; scope=refresh;
abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=JdbcPasswordManagementDataConfiguration; factoryMethodName=jdbcPasswordManagementDataSource; initMethodNames=null; destroyMethodNames=[(inferred)];
defined in class path resource [org/apereo/cas/config/JdbcPasswordManagementConfiguration$JdbcPasswordManagementDataConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true;
primary=false; factoryBeanName=QuestCasConfiguration; factoryMethodName=jdbcPasswordManagementDataSource; initMethodNames=null; destroyMethodNames=[(inferred)]; defined in class path resource [org/apereo/cas/config/QuestCasConfiguration.class]]>
2024-05-06 10:49:55,257 DEBUG [restartedMain] [org.springframework.beans.factory.support.DefaultListableBeanFactory] - <Creating shared instance of singleton bean 'org.springframework.boot.autoconfigure.AutoConfigurationPackages'>
....
JdbcPasswordHistoryManagementConfiguration matched:
- Requested features [PasswordManagementHistory] are enabled (CasFeatureEnabledCondition)
JdbcPasswordManagementConfiguration matched:
- Requested features [PasswordManagement] are enabled (CasFeatureEnabledCondition)
JdbcPasswordManagementConfiguration.JdbcPasswordManagementDataConfiguration#jdbcPasswordManagementDataSource matched:
- @ConditionalOnMissingBean (names: jdbcPasswordManagementDataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
JdbcPasswordManagementConfiguration.JdbcPasswordManagementServiceConfiguration#passwordChangeService matched:
- @ConditionalOnMissingBean (names: jdbcPasswordChangeService; SearchStrategy: all) did not find any beans (OnBeanCondition)
JdbcPasswordManagementConfiguration.JdbcPasswordManagementTransactionConfiguration#jdbcPasswordManagementTransactionTemplate matched:
- @ConditionalOnMissingBean (names: jdbcPasswordManagementTransactionTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition)
thanks!
Yan