1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.linecorp.centraldogma.server.auth;
17
18 import java.io.ByteArrayInputStream;
19 import java.io.IOException;
20 import java.io.ObjectInputStream;
21 import java.io.Serializable;
22 import java.util.Base64;
23
24 import com.fasterxml.jackson.core.JsonParser;
25 import com.fasterxml.jackson.databind.DeserializationContext;
26 import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
27
28
29
30
31 public final class RawSessionJsonDeserializer extends StdDeserializer<Serializable> {
32
33 private static final long serialVersionUID = 6711539370106208875L;
34
35
36
37
38 public RawSessionJsonDeserializer() {
39 super(Serializable.class);
40 }
41
42 @Override
43 public Serializable deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
44 try (ByteArrayInputStream bais =
45 new ByteArrayInputStream(Base64.getDecoder().decode(p.readValueAs(String.class)));
46 ObjectInputStream ois = new ObjectInputStream(bais)) {
47 return (Serializable) ois.readObject();
48 } catch (ClassNotFoundException e) {
49 ctxt.reportInputMismatch(Serializable.class, "failed to deserialize a raw session: " + e);
50 throw new Error();
51 }
52 }
53 }