【发布时间】:2021-03-15 02:52:09
【问题描述】:
我正在关注 tutorial 以使用 spring boot 和 java 实现 JWT 身份验证。但就我而言,我想用 Kotlin 来做。
我能够生成 jwt 令牌,但在从 jwt 令牌中提取声明时遇到问题。
在本教程中,有一个从令牌中提取声明的通用函数。
public <T> T extractClaim(String token, Function<Claims, T> claimsResolver {
final Claims claims = extractAllClaims(token);
return claimResolver.apply(claims);
}
private Claims extractAllClaims(String token) {
return Jwts.parser().setSigningKey(KEY).parseClaimsJws(token).getBody();
}
public String extractUsername(String token) {
return extractClaim(token, Claims::getSubject);
}
我用 kotlin 写的如下。
fun <T> extractClaim(token: String, claimResolver: Function<Claims, T>): T {
val claims = extractAllClaims(token)
return claimResolver.apply(claims)
}
private fun extractAllClaims(token: String): Claims {
return Jwts.parser().setSigningKey(key).parseClaimsJws(token).body
}
fun extractUsername(token: String): String {
return extractClaim(token, Claims::getSubject)
}
我收到了一个来自 Function
接口函数需要一个类型参数
我还可以看到还有其他选项,例如 KFunction 和 KFunction1。
我在 Kotlin 方面没有多少经验,有人可以帮我解决这里的问题或提出更好的解决方法。
【问题讨论】:
-
你在导入正确的
Function类吗? -
@gidds 你是对的。我正在导入错误的课程。现在我将其更改为 java.util.function.Function。但是现在我得到了 Required Function
> but Found KFunction1 from extractUsername method Claims::getSubject
标签: spring-boot kotlin generics jjwt