OK, ein benutzerdefiniertes Feld auf die Nutzlast ein paar individuelle Ansprüche Hinzufügen ich, wenn ich die JWT generieren, und ich kann diese aus ganz gut in meinem Front-End (Javascript ziehen). Ich lasse dann mein Javascript einen Ajax-Anruf an einen Mikro-Dienst senden und es übergibt das JWT mit ihm. Ich möchte meine persönlichen Ansprüche aus dem JWT im Mikro-Service herausholen. Ich mache folgendes:Wie kann ich aus der Nutzlast erhalten mit JJWT
Claims claims = Jwts.parser().setSigningKey(Vars.SECRET_KEY).parseClaimsJws(token).getBody();
User user = claims.get("customuser", User.class);
und es löst eine Ausnahme aus.
io.jsonwebtoken.RequiredTypeException: Expected value to be of type: class net.netdatacorp.netdauth.model.User, but was class java.util.LinkedHashMap
at io.jsonwebtoken.impl.DefaultClaims.get(DefaultClaims.java:128)
Hier ist, wie die Daten im JWT-Inspektor auf der Front-End für meine benutzerdefinierten Anspruch aussieht.
{
jti: "83bffbad-7d36-4370-9332-21a84f2a3dce",
iat: 1498241526,
sub: "test",
iss: "www.test.net",
customuser: {
userId: 1,
userCd: "TMM",
firstNm: "Testy",
lastNm: "McTesty",
userNm: "test",
emailAddress: "[email protected]",
active: true,
createdDt: 1491355712000,
createdByUserId: 0,
lastUpdateDt: 1498199278000,
lastUpdateByUserId: 0,
lastLoginDt: 1484928016000
}
}
Was vermisse ich, um meinen benutzerdefinierten Anspruch herausziehen zu können?
nahm ich einen lok, und sah, dass die einzige Implementierung von 'JwtParser' vorgesehen ist' DefaultJwtParser', die auf Jackson 'ObjectMapper' beruht, aber leider ist es nicht aussetzen Anpassung zu ermöglichen. Nicht einmal über Vererbung: Methode 'readValue' ist' protected' aber immer nur gibt 'Map' für Objekte ([siehe hier in 0.7.0] (https://github.com/jwtk/jjwt/blob/0.7.0/ src/main/java/io/jsonwebtoken/impl/DefaultJwtParser.java # L550-L556)). Es scheint, Sie bräuchten implementieren 'JwtParser' sich von Grund auf neu ... oder manuell die Karte zu Ihrem Objekt konvertieren: -/ –
In diesem Fall sieht es aus wie ich Bibliotheken Schalt werden, es sieht aus wie jose4j handhaben kann, was ich Ich will es tun. –
@JacobMiles, tun Sie das 'jose4j' Code zum Vergleich etwas ausmachen, veröffentlichen? – chenrui