spring-session-data-mongodb
spring-session-data-mongodb copied to clipboard
ConversionFailedException while using MongoDB session
We are noticing a lot of ConversionFailedException for MongoDB Sessions in our logs. Following is the sample logs for reference. All the logs are similar with different UUID.
Message: Failed to convert from type [java.lang.String] to type [org.bson.types.ObjectId] for value '2359e11c-3479-49b7-b531-cd84123ad006'; nested exception is java.lang.IllegalArgumentException: invalid hexadecimal representation of an ObjectId: [2359e11c-3479-49b7-b531-cd84123ad006] Stacktrace: org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:47) org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:191) org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174) org.springframework.data.mongodb.core.convert.MongoConverter.convertId(MongoConverter.java:146) org.springframework.data.mongodb.core.convert.QueryMapper.convertId(QueryMapper.java:629) org.springframework.data.mongodb.core.convert.QueryMapper.getMappedValue(QueryMapper.java:377) org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObjectForField(QueryMapper.java:240) org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:143) org.springframework.data.mongodb.core.QueryOperations$QueryContext.getMappedQuery(QueryOperations.java:255) org.springframework.data.mongodb.core.QueryOperations$UpdateContext.getMappedQuery(QueryOperations.java:646) org.springframework.data.mongodb.core.MongoTemplate.lambda$ org.springframework.data.mongodb.core.MongoTemplate$$Lambda$.doInCollection org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:566) org.springframework.data.mongodb.core.MongoTemplate.saveDocument(MongoTemplate.java:1485) org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:1421) org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:1363) org.springframework.session.data.mongo.MongoIndexedSessionRepository.save(MongoIndexedSessionRepository.java:89) org.springframework.session.data.mongo.MongoIndexedSessionRepository.save(MongoIndexedSessionRepository.java:50) org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$ org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryResponseWrapper.onResponseCommitted(SessionRepositoryFilter.java:179) org.springframework.session.web.http.OnCommittedResponseWrapper.doOnResponseCommitted(OnCommittedResponseWrapper.java:227) org.springframework.session.web.http.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:129) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138) org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:43) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138) org.springframework.security.web.util.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:135) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138) org.springframework.security.web.util.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:135) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138) org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:43) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138) javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138) org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:43) jdk.internal.reflect.GeneratedMethodAccessor.invoke jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke java.lang.reflect.Method.invoke org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
We are using spring-session-data-mongodb (2.3.0 RELEASE) with spring-boot-starter-data-mongodb (2.3.2 RELEASE). Spring boot 2.3.2 RELEASE with Hoxton.SR5 cloud version.
JVM version (e.g. java -version
)
Java 11
Indeed, that IS an invalid hexadecimal value to try to convert into an ObjectId
. The question is...where is it coming from?
A) You may wish to bump things up to Spring Boot 2.3.9. This should put you on Spring Data Neumann-SR6. Not really sure this is the problem, but it will ensure we aren't dealing with something that has already been patched.
B) Can you include a little bit of the configuration you are using? For example, are you using Jackson or JDK for serialization? I also doubt this is the issue at hand, but it can help cut the time in half about which converter I need to investigate.
@gregturn I am using JdkMongoSessionConverter. Though it doesn't look to be needed as this is default, I have created following bean -
@Bean
public JdkMongoSessionConverter jdkMongoSessionConverter() {
return new JdkMongoSessionConverter(serverProperties.getServlet().getSession().getTimeout());
}
Apart from above, there is no other explicit configuration.