Spring boot 从Kotlin调用JJWT时出现的NoMethodError
我正在Kotlin开发一个小型Spring引导应用程序,现在我想使用JJWT保护它。粗略地说,我将本教程翻译为我的用例: 在项目中,我有以下AuthenticationFilter: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
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调用,没有反射/