Make Jackson operational.
Resolves https://github.com/spring-projects/spring-session/issues/913
This commit is contained in:
@@ -22,7 +22,6 @@ import java.util.Set;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.bson.Document;
|
||||
|
||||
import org.springframework.core.convert.TypeDescriptor;
|
||||
import org.springframework.core.convert.converter.GenericConverter;
|
||||
import org.springframework.data.domain.Sort;
|
||||
|
||||
@@ -17,13 +17,16 @@ package org.springframework.session.data.mongo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.bson.Document;
|
||||
|
||||
import org.bson.json.JsonMode;
|
||||
import org.bson.json.JsonWriterSettings;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.security.jackson2.SecurityJackson2Modules;
|
||||
import org.springframework.session.FindByIndexNameSessionRepository;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
||||
@@ -85,9 +88,27 @@ public class JacksonMongoSessionConverter extends AbstractMongoSessionConverter
|
||||
|
||||
objectMapper.setPropertyNamingStrategy(new MongoIdNamingStrategy());
|
||||
|
||||
objectMapper.registerModules(SecurityJackson2Modules.getModules(getClass().getClassLoader()));
|
||||
objectMapper.addMixIn(MongoSession.class, MongoSessionMixin.class);
|
||||
objectMapper.addMixIn(HashMap.class, HashMapMixin.class);
|
||||
|
||||
return objectMapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to whitelist {@link MongoSession} for {@link SecurityJackson2Modules}.
|
||||
*/
|
||||
private static class MongoSessionMixin {
|
||||
// Nothing special
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to whitelist {@link HashMap} for {@link SecurityJackson2Modules}.
|
||||
*/
|
||||
private static class HashMapMixin {
|
||||
// Nothing special
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DBObject convert(MongoSession source) {
|
||||
|
||||
@@ -103,8 +124,8 @@ public class JacksonMongoSessionConverter extends AbstractMongoSessionConverter
|
||||
@Override
|
||||
protected MongoSession convert(Document source) {
|
||||
|
||||
String json = JSON.serialize(source);
|
||||
|
||||
String json = source.toJson(JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build());
|
||||
|
||||
try {
|
||||
return this.objectMapper.readValue(json, MongoSession.class);
|
||||
} catch (IOException e) {
|
||||
|
||||
Reference in New Issue
Block a user