Skip to content
This repository was archived by the owner on Feb 7, 2018. It is now read-only.

Commit 5d38780

Browse files
committed
Bug fix for classloader issues when deserializing custom objects.
1 parent aaf16ff commit 5d38780

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/main/java/com/amazonaws/services/dynamodb/sessionmanager/DynamoDBSessionStore.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,17 @@
1616

1717
import java.io.ByteArrayInputStream;
1818
import java.io.IOException;
19-
import java.io.ObjectInputStream;
2019
import java.nio.ByteBuffer;
2120
import java.util.Collections;
2221
import java.util.HashSet;
2322
import java.util.Map;
2423
import java.util.Set;
2524

25+
import org.apache.catalina.Container;
2626
import org.apache.catalina.Session;
2727
import org.apache.catalina.session.StandardSession;
2828
import org.apache.catalina.session.StoreBase;
29+
import org.apache.catalina.util.CustomObjectInputStream;
2930

3031
import com.amazonaws.services.dynamodb.sessionmanager.util.DynamoUtils;
3132
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
@@ -113,9 +114,17 @@ public Session load(String id) throws ClassNotFoundException, IOException {
113114

114115
ByteBuffer byteBuffer = item.get(SessionTableAttributes.SESSION_DATA_ATTRIBUTE).getB();
115116
ByteArrayInputStream inputStream = new ByteArrayInputStream(byteBuffer.array());
116-
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
117117

118-
Object readObject = objectInputStream.readObject();
118+
Object readObject;
119+
CustomObjectInputStream objectInputStream = null;
120+
try {
121+
Container webapp = getManager().getContainer();
122+
objectInputStream = new CustomObjectInputStream(inputStream, webapp.getLoader().getClassLoader());
123+
124+
readObject = objectInputStream.readObject();
125+
} finally {
126+
try { objectInputStream.close(); } catch (Exception e) {}
127+
}
119128

120129
if (readObject instanceof Map<?, ?>) {
121130
Map<String, Object> sessionAttributeMap = (Map<String, Object>)readObject;

0 commit comments

Comments
 (0)