我开发了一个Java EE webapp,它使用自定义参数生成JWT。 它主要运行良好,但在极少数情况下,生成的字符串(我的JWT)包含一个断行,这不应该发生(因为这个JWT应该是URL的一部分)。
更多信息: 在我的计算机上,这个错误永远不会出现(比如......从不),但在其他情况下它有时会出现(使用相同的数据,相同的工作空间......相同的一切)。 唯一改变的是操作系统(Win 7& Win 10,两者都是x64)
开发环境:
我的代码:
String id = "someId";
int tokenDuration = jwtDuration* 60 * 1000;
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = Calendar.getInstance().getTimeInMillis();
Date now = new Date(nowMillis);
// Hash key
byte[] apiKeySecretBytes = TextCodec.BASE64.decode(jwtKey);
long expMillis = nowMillis + tokenDuration;
Date exp = new Date(expMillis);
// JWT building
JwtBuilder builder = Jwts.builder()
.setId(id)
.setIssuedAt(now)
.setExpiration(exp)
.setIssuer(applicationName)
.claim("user", myUser)
.signWith(signatureAlgorithm, apiKeySecretBytes);
return builder.compact();
有人可以向我解释这个魔法吗? :d 非常感谢
答案 0 :(得分:1)
我不是Java开发人员,但是如果此令牌是有效的JWT,则可以从其中删除换行符:
...
return builder.compact().replaceAll("\n","")
但是我无法解释为什么会发生这种情况!
答案 1 :(得分:0)
更新:jjwt-api的新版本0.10.5(jjwt-impl等...)解决了此问题!所以现在一切都很好:)