[cas-user] CAS 6.4.4.2 with MongoDB for Service-, Ticket-Registry and Session-Storage

2 views
Skip to first unread message

'martin....@springer.com' via CAS Community

unread,
Jan 17, 2022, 11:33:30 AM1/17/22
to CAS Community
Hi cas-users, 

Using CAS 6.4.4.2 with MongoDB for Service-, Ticket-Registry and Session-Storage at the same time fails to auto-configure in my setup. 

My observations so far:

1. Adding 
------------------------------------------------------------------------------------------------
implementation "org.apereo.cas:cas-server-support-session-mongo:${project.'cas.version'}"
------------------------------------------------------------------------------------------------

to build.gradle only,  also requires to re-enable MongoAutoConfiguration and MongoDataAutoConfigration by overriding config key spring.autoconfigure.exclude since /webapp/cas-server-webapp-resources/src/main/resources/application.properties disables it:

------------------------------------------------------------------------------------------------
 spring.autoconfigure.exclude= \
   org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
   org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
   org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
------------------------------------------------------------------------------------------------

otherwise no MongoTemplate is found at all:

------------------------------------------------------------------------------------------------
**************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method mongoSessionRepository in org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration required a bean of type 'org.springframework.data.mongodb.core.MongoOperations' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.data.mongodb.core.MongoOperations' in your configuration.
------------------------------------------------------------------------------------------------


2. Additionally enabling 

------------------------------------------------------------------------------------------------
implementation "org.apereo.cas:cas-server-support-mongo-service-registry:${project.'cas.version'}"
implementation "org.apereo.cas:cas-server-support-mongo-ticket-registry:${project.'cas.version'}"
------------------------------------------------------------------------------------------------

Modules cas-server-support-mongo-service-registry and cas-server-support-mongo-ticket-registry both configure named MongoTemplate beans, which they actually do even use themselves, but lead to ambiguity when resolving a single candidate for the cas-server-support-session-mongo module.

Removing these @Bean definitions solves this problem:

------------------------------------------------------------------------------------------------
diff --git a/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java b/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java
index 0227845922..9ed3aea44d 100644
--- a/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java
+++ b/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java
@@ -47,9 +47,7 @@ public class MongoDbServiceRegistryConfiguration {
     @Qualifier("sslContext")
     private ObjectProvider<SSLContext> sslContext;
 
-    @ConditionalOnMissingBean(name = "mongoDbServiceRegistryTemplate")
-    @Bean
-    public MongoTemplate mongoDbServiceRegistryTemplate() {
+    private MongoTemplate mongoDbServiceRegistryTemplate() {
         val mongo = casProperties.getServiceRegistry().getMongo();
         val factory = new MongoDbConnectionFactory(sslContext.getObject());
 
diff --git a/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java b/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java
index 0a5b538a33..9195ff88a7 100644
--- a/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java
+++ b/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java
@@ -55,10 +55,7 @@ public class MongoDbTicketRegistryConfiguration {
         return registry;
     }
 
-    @ConditionalOnMissingBean(name = "mongoDbTicketRegistryTemplate")
-    @Bean
-    @RefreshScope
-    public MongoTemplate mongoDbTicketRegistryTemplate() {
+    private MongoTemplate mongoDbTicketRegistryTemplate() {
         val factory = new MongoDbConnectionFactory(sslContext.getObject());
         val mongo = casProperties.getTicket().getRegistry().getMongo();
         return factory.buildMongoTemplate(mongo);
------------------------------------------------------------------------------------------------

otherwise it fails with 

------------------------------------------------------------------------------------------------
***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method mongoSessionRepository in org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration required a single bean, but 2 were found:
        - mongoDbServiceRegistryTemplate: defined by method 'mongoDbServiceRegistryTemplate' in class path resource [org/apereo/cas/config/MongoDbServiceRegistryConfiguration.class]
        - mongoDbTicketRegistryTemplate: defined in BeanDefinition defined in class path resource [org/apereo/cas/config/MongoDbTicketRegistryConfiguration.class]


Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
------------------------------------------------------------------------------------------------

My question now is, how can I fix this nonfunctional behavior without patching the original CAS 6.4.4.2 modules cas-server-support-mongo-service-registry and cas-server-support-mongo-ticket-registry? Is there better, easier or more elegant way to use MongoDB for Session, Service and Ticket Storage at the same time?

Regards

Martin





--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cas-user+u...@apereo.org.
To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/db00850f-7c02-4912-aff3-e11a11317fa9n%40apereo.org.

'martin....@springer.com' via CAS Community

unread,
Jan 17, 2022, 2:15:24 PM1/17/22
to CAS Community, martin....@springer.com
ah sorry for the typo,  in line
...
Modules cas-server-support-mongo-service-registry and cas-server-support-mongo-ticket-registry both configure named MongoTemplate beans, which they actually do even use themselves, but lead to ambiguity when resolving a single candidate for the cas-server-support-session-mongo module.
...

I forgot the important word "NOT". Instead it should read:
...
Modules cas-server-support-mongo-service-registry and cas-server-support-mongo-ticket-registry both configure named MongoTemplate beans, which they actually do NOT even use themselves, but lead to ambiguity when resolving a single candidate for the cas-server-support-session-mongo module.
....
To view this discussion on the web visit https://groups.google.com/a/apereo.org/d/msgid/cas-user/4fdaacef-2e4b-4024-a77e-cd67f3b63689n%40apereo.org.
Reply all
Reply to author
Forward
0 new messages