首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Kotlin调用JJWT时的NoMethodError

从Kotlin调用JJWT时的NoMethodError
EN

Stack Overflow用户
提问于 2019-08-21 15:56:21
回答 2查看 1K关注 0票数 1

我正在用Kotlin开发一个小的Spring Boot应用程序,现在我想用JJWT来保护它。粗略地说,我正在将本教程转换为我的用例:https://jakublesko.com/spring-security-with-jwt/

在项目中,我有这个AuthenticationFilter:

代码语言:javascript
复制
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 at io.jsonwebtoken.security.Keys.hmacShaKeyFor(Keys.java:69) ~[jjwt-api-0.10.7.jar:na]

我可以调试到successfulAuthentication方法中,并看到它是用合理的参数调用的。吸引我眼球的是getMinKeyLength()I末尾括号后面的"I“。我的googling搜索技能显然不足以找到它存在的原因,但我强烈怀疑它与反射有关&从Kotlin代码中调用Java库。

有没有人能告诉我怎么解决这个问题?我已经猜不到了。

EN

回答 2

Stack Overflow用户

发布于 2020-07-31 21:35:52

我偶然发现了同样的问题。出现这种情况的原因很可能是依赖冲突。使用jjwt检查您是否有其他依赖项。对我们来说,它就是com.twilio.sdk

您可以使用以下命令完成此操作

代码语言:javascript
复制
mvn dependency:tree -Dverbose

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

票数 2
EN

Stack Overflow用户

发布于 2021-10-22 18:43:09

要从Kotlin运行java代码,请将java源代码放在文件夹下。

main/java

此外,您的kotlin源代码位于main/kotlin下

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57586942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档