播放框架:play.api.mvc.DefaultJWTCookieDataCodec 解码:无法解码 JWT:空

Play framework: play.api.mvc.DefaultJWTCookieDataCodec decode: could not decode JWT: null

我不断收到很多这样的警告:

play.api.mvc.DefaultJWTCookieDataCodec decode: could not decode JWT: null
java.lang.NullPointerException: null
    at play.api.mvc.JWTCookieDataCodec.$anonfun$decode(Cookie.scala:649)
    at scala.collection.MapLike$MappedValues.$anonfun$foreach(MapLike.scala:256)
    at scala.collection.TraversableLike$WithFilter.$anonfun$foreach(TraversableLike.scala:912)
    at scala.collection.Iterator.foreach(Iterator.scala:943)
    at scala.collection.Iterator.foreach$(Iterator.scala:943)

我不知道他们从哪里来,也不知道他们为什么来,怎么来的。

哦,亲爱的,我们从哪里开始。

你的代码中是否碰巧有这样的东西?

Redirect(...).flashing("error" -> null)

你看,Play 中的 "flash" 机制使用 cookie 来存储值,而恰好 "JWT cookie decoder" 真的不喜欢 null 值。首先,它破坏了使用它的 flash 机制,一旦 null 在那里,它就会开始更多地抛出这些警告或 到处都少。

但是,但是,但是,你说,我是Scala开发者!我从不使用 null!

很好。但是你有没有使用 ex.getMessage 其中 ex 是任意的 Exception?

我是这么认为的。你看,Exception#getMessage可能returnnull。特别是,NullPointerException#getMessage return value null 而不是字符串 "null" !

赞。

无论如何,如果你有类似的东西:

case Failure(ex) =>
  Redirect(...).flashing("error" -> ex.getMessage)

这可能是罪魁祸首。