JWT构建器添加了不需要的新行

时间:2018-04-09 12:36:33

标签: java jwt

我开发了一个Java EE webapp,它使用自定义参数生成JWT。 它主要运行良好,但在极少数情况下,生成的字符串(我的JWT)包含一个断行,这不应该发生(因为这个JWT应该是URL的一部分)。

更多信息: 在我的计算机上,这个错误永远不会出现(比如......从不),但在其他情况下它有时会出现(使用相同的数据,相同的工作空间......相同的一切)。 唯一改变的是操作系统(Win 7& Win 10,两者都是x64)

开发环境:

  • JAVA 1.7.45
  • Apache Tomcat 7.0.82
  • JWT API:0.9.0

我的代码:

        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 非常感谢

2 个答案:

答案 0 :(得分:1)

我不是Java开发人员,但是如果此令牌是有效的JWT,则可以从其中删除换行符:

...
return builder.compact().replaceAll("\n","")

但是我无法解释为什么会发生这种情况!

答案 1 :(得分:0)

更新:jjwt-api的新版本0.10.5(jjwt-impl等...)解决了此问题!所以现在一切都很好:)