Spring boot 从Kotlin调用JJWT时出现的NoMethodError

Spring boot 从Kotlin调用JJWT时出现的NoMethodError,spring-boot,kotlin,jjwt,Spring Boot,Kotlin,Jjwt,我正在Kotlin开发一个小型Spring引导应用程序,现在我想使用JJWT保护它。粗略地说,我将本教程翻译为我的用例: 在项目中,我有以下AuthenticationFilter: class JwtAuthenticationFilter(val authManager: AuthenticationManager) : UsernamePasswordAuthenticationFilter() { // other stuff omitted for brevity

我正在Kotlin开发一个小型Spring引导应用程序,现在我想使用JJWT保护它。粗略地说,我将本教程翻译为我的用例:

在项目中,我有以下AuthenticationFilter:

class JwtAuthenticationFilter(val authManager: AuthenticationManager) : UsernamePasswordAuthenticationFilter() {

    // other stuff omitted for brevity

    override fun successfulAuthentication(request: HttpServletRequest?, response: HttpServletResponse?, chain: FilterChain?, authResult: Authentication?) {
        val user = authResult?.principal as User

        val roles = user.authorities
                .stream()
                .map(GrantedAuthority::getAuthority)

        val signingKey = JWT_SECRET.toByteArray()

        val token = Jwts.builder()
                .signWith(SignatureAlgorithm.HS512, Keys.hmacShaKeyFor(signingKey))
                .setHeaderParam("typ", TOKEN_TYPE) // validate that "typ" does not actually mean "type"
                .setIssuer(TOKEN_ISSUER)
                .setAudience(TOKEN_AUDIENCE)
                .setSubject(user.username)
                .setExpiration(Date(System.currentTimeMillis() + 864000000))
                .claim("rol", roles)
                .compact()

        response?.addHeader(TOKEN_HEADER, TOKEN_PREFIX + token)
    }
}
当我发布到应该发出令牌的身份验证URL时,我收到:

java.lang.NoSuchMethodError:io.jsonwebtoken.SignatureAlgorithm.getMinKeyLength()I
在io.jsonwebtoken.security.Keys.hmacShaKeyFor(Keys.java:69)~[jjwt-api-0.10.7.jar:na]

我可以调试到
successfuldauthentication
方法中,并查看是否使用合理的参数调用了它。吸引我的是
getMinKeyLength()I
末尾括号后的“I”。我的谷歌搜索技能显然不足以找到它存在的原因,但我强烈怀疑它与反射有关&从Kotlin代码调用Javalibs


周围有人能告诉我怎么解决这个问题吗?我已经猜不透了。

我偶然发现了同样的问题。原因很可能是依赖冲突。使用jjwt检查是否有任何其他依赖项。对我们来说是
com.twilio.sdk

你可以使用

mvn dependency:tree -Dverbose

在确定了冲突的依赖项之后,您可以匹配jjwt版本,也可以将其从依赖项中排除。

我偶然发现了同样的问题。原因很可能是依赖冲突。使用jjwt检查是否有任何其他依赖项。对我们来说是
com.twilio.sdk

你可以使用

mvn dependency:tree -Dverbose

确定冲突依赖项后,可以匹配jjwt版本,也可以将其从依赖项中排除。

jjwt 0.10.7的Keys.java行69只是一个标准(非反射)java方法调用:。我不知道为什么Kotlin会有问题-我希望我知道我自己:/你能解决这个问题吗?运气好吗?不幸的是,没有。:/我想知道它可能是什么-这是一个普通的Java调用,没有反射/JJWT 0.10.7的Keys.java行69只是一个标准(非反射)java方法调用:。我不知道为什么Kotlin会有问题-我希望我知道我自己:/你能解决这个问题吗?运气好吗?不幸的是,没有。:/我想知道它可能是什么-这是一个普通的Java调用,没有反射/