JwtBuilder добавить \ в мою строку Json - Java - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть строка JSON (сделанная Джексоном для преобразования объекта):

String my_JSON_String = {"id":-1,"id_contratto":1,"datetime_inizio":"2018-09-15 17:44:02","datetime_fine":null,"numero_chiamate_individuali":-1,"minuti_totali_chiamate_individuali":1421,"numero_chiamate_gruppo":3027,"minuti_totali_chiamate_gruppo":-1,"numero_messaggi_individuali_testo":-1,"numero_messaggi_individuali_multimediali":-1,"numero_messaggi_gruppo_testo":-1,"numero_messaggi_gruppo_multimediali":-1,"numero_eventi_inviati":-1,"numero_interventi_creati":-1,"enabled":false}

Я должен поместить эту строку в настраиваемое поле под названием «DATI» в заявке JWT. Я использую:

JwtBuilder MY_JwtBuilder = Jwts.builder()
                .setIssuedAt( new Date() )
                .setIssuer("Fausto")
                .setSubject("Ciao")
                .claim("DATI", my_JSON_String ) 
                .signWith(SignatureAlgorithm.HS256, "DonalDuck");
String JWT=  MY_JwtBuilder.compact();

Если я тестирую JWT, помещая его в https://jwt.io/,, я получаю следующую строку:

{
  "iat": 1537026243,
  "iss": "Fausto",
  "sub": "Ciao",
  "DATI": "{\"id\":-1,\"id_contratto\":1,\"datetime_inizio\":\"2018-09-15 17:44:02\",\"datetime_fine\":null,\"numero_chiamate_individuali\":-1,\"minuti_totali_chiamate_individuali\":1421,\"numero_chiamate_gruppo\":3027,\"minuti_totali_chiamate_gruppo\":-1,\"numero_messaggi_individuali_testo\":-1,\"numero_messaggi_individuali_multimediali\":-1,\"numero_messaggi_gruppo_testo\":-1,\"numero_messaggi_gruppo_multimediali\":-1,\"numero_eventi_inviati\":-1,\"numero_interventi_creati\":-1,\"enabled\":false}",
  "exp": 1537029843
}

Было добавлено \ для каждой кавычки внутри поля DATI. Это проблема со стороны веб-сайта. Как избежать добавления \?

Спасибо, Фаусто

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Проблема в том, что вы уже создали строку из вашего объекта DATI.JWTBuilder обрабатывает его как строку и экранирует " внутри с помощью \.

Вместо того, чтобы создавать JSON-String самостоятельно, создайте объект JSON и передайте этот объект в качестве параметра claim и пусть JWTBuilder позаботится о правильной сериализации этого объекта, например:

JSONObject datiClaim = new JSONObject();
datiClaim.put("id", -1);
datiClaim.put("id_contratto", 1);

...

JwtBuilder MY_JwtBuilder = Jwts.builder()
            .setIssuedAt( new Date() )
            .setIssuer("Fausto")
            .setSubject("Ciao")
            .claim("DATI", datiClaim ) 
....
0 голосов
/ 16 сентября 2018

Вы можете использовать String#replaceAll() с шаблоном ^\"|\"$

* 1005 Е.Г. *

String JWT = MY_JwtBuilder.compact().replaceAll("^\"|\"$", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...