我在我的 API 上使用 Vertx 框架来授权 JWT 令牌。在用户获得授权并解密令牌后,我想访问令牌的内容,特别是令牌中的“userId”字段。
最初我使用req
as访问它RoutingContext
:
req.user().principal().getString("userId");
这会按预期工作,直到它在不同的机器上编译。当在不同的机器上编译时,req.user().principal()
只包含字段access_token
,包含仍然加密的 JWT。
解决方案是通过以下方式访问用户 ID
req.user().attributes().getJsonObject("accessToken").getString("userId");
我已经在 4 台不同的机器上对此进行了测试。其中 2 个使用主体工作,另外 2 个需要属性。似乎只在乎它在哪台机器上编译,而不在乎它在什么机器上运行。机器之间没有更改代码。Java、Maven 和 Vertx 版本每次都相同。
我在网上找到的一些解决方案只是检查所需字段是否主要,如果不使用属性。不过,这似乎是一个糟糕的解决方法。必须有适当的方法来访问它。
访问解码令牌中的值的正确方法是什么?为什么它似乎会根据编译机而改变?