You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 13:39:01