使用nimbus-jose-jwt库调用encrypt()方法提示Cannot resolve symbol 'encrypt'如何解决
问题解决方案
1. 检查类导入是否正确
确认你导入的JWEObject是com.nimbusds.jose.JWEObject,而非其他库的同名类,完整导入参考:
import com.nimbusds.jose.JWEAlgorithm; import com.nimbusds.jose.JWEHeader; import com.nimbusds.jose.JWEObject; import com.nimbusds.jose.Payload; import com.nimbusds.jose.crypto.RSAEncrypter; import com.nimbusds.jose.JOSEException; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPublicKey; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey;
2. 校验依赖与编译配置
- 确认引入的nimbus-jose-jwt版本≥4.0,低于该版本的
JWEObject未提供encrypt()方法,模块级build.gradle依赖配置参考:dependencies { implementation 'com.nimbusds:nimbus-jose-jwt:9.31' } - 开启Java 8编译支持,高版本nimbus库依赖Java 8 API,在模块级
build.gradle的android块中添加配置:android { // 其他原有配置 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } - 排查依赖冲突,执行
./gradlew app:dependencies命令检查是否有重复引入的nimbus相关依赖,若存在冲突做排除处理即可。
3. 修正代码逻辑位置
你当前的密钥生成、加密逻辑直接写在类的成员属性区域,不属于任何方法/初始化块,该位置不允许调用抛出受检异常的方法,也会导致IDE识别异常,将逻辑移入构造方法或独立方法即可,修正后代码参考:
public class EncryptedJWTGenerator { public EncryptedJWTGenerator() throws NoSuchAlgorithmException, JOSEException { JWEAlgorithm alg = JWEAlgorithm.RSA_OAEP_256; EncryptionMethod enc = EncryptionMethod.A128CBC_HS256; KeyPairGenerator rsaGen = KeyPairGenerator.getInstance("RSA"); rsaGen.initialize(2048); KeyPair rsaKeyPair = rsaGen.generateKeyPair(); RSAPublicKey rsaPublicKey = (RSAPublicKey)rsaKeyPair.getPublic(); // 生成内容加密密钥(CEK) KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); SecretKey cek = keyGenerator.generateKey(); // 构造并加密JWE对象 JWEObject jweObject = new JWEObject(new JWEHeader(alg, enc), new Payload("Hello, world!")); jweObject.encrypt(new RSAEncrypter(rsaPublicKey, cek)); String jweString = jweObject.serialize(); } }
4. 清理IDE缓存
如果上述配置都正确仍出现报错,属于Android Studio缓存异常导致,依次点击菜单栏 File → Invalidate Caches / Restart 清理缓存重启即可解决。
内容的提问来源于stack exchange,提问作者Sparsh Dutta
相关产品推荐
相关产品推荐

