首页 > 解决方案 > 如何在颤振中添加 Java 依赖项?

问题描述

我正在研究 Java 中的一个函数,该函数负责为我的 API 生成一个 RSA 令牌。java人给出了以下要添加的依赖项

api 'io.jsonwebtoken:jjwt-api:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2'
runtimeOnly('io.jsonwebtoken:jjwt-orgjson:0.11.2') {
    exclude group: 'org.json', module: 'json' //provided by Android natively
}

但是在颤振中,您不能像在 pubspec.yaml 文件中那样添加它。

事实证明,还有另一种方法可以添加 github 文件的依赖项(经过我的研究),我找到了依赖项的 github 链接并将其添加到我的 pubspec 文件中,如下所示,在依赖项下,

dev_dependencies:
  flutter_test:
    sdk: flutter
  plugin1:
    git:
      url: git://github.com/jwtk/jjwt.git

但是对于 git 文件 git://github.com/jwtk/jjwt.git,我收到以下错误pubspec 错误

我在 pub.dev 上搜索了任何等效依赖项,即 dart_json webtoken ,但这会引发以下错误:dart_jsonwebtoken 错误

基本上这是我生成令牌的 java 类。这里的 Jwts.builder() 除了一个适当的插件和我被卡住的地方:

import android.util.Log;

import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Date;
import java.util.concurrent.TimeUnit;


public class RSAKeyGenerator {
    private static PrivateKey getPrivateKey() throws GeneralSecurityException {
        String pKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        KeyFactory kf = KeyFactory.getInstance("RSA");
        byte[] decode;
        decode = android.util.Base64.decode(pKey, android.util.Base64.DEFAULT);
        PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(decode);
        return kf.generatePrivate(keySpecPKCS8);
    }
    public static String getJwtToken() {
        final long VALIDITY_MS = TimeUnit.MINUTES.toMillis(60);
        long nowMillis = System.currentTimeMillis();
        Date now = new Date(nowMillis);
        Date exp = new Date(nowMillis + VALIDITY_MS);
        PrivateKey privateKey = null;
        try {
            privateKey = getPrivateKey();
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }
        String jws = Jwts.builder()
                .claim("version", "13")
                .claim("user_id", "xxxxxxxxxxxxxxxxxxx")
                .setIssuedAt(now)
                .setExpiration(exp)
                .signWith(privateKey, SignatureAlgorithm.RS256)
                .setAudience("live-tv")
                .compact();
        Log.d("111__", jws);
        SpUtil.Companion.getInstance().putString(J_TOKEN, jws);
        return jws;
    }
}

我在flutter中使用了另一个插件,但你不能在Java类中导入它,我也不确定那个插件。我的意思是在java类中导入'package:xxx.dart'会抛出一个错误。我该如何解决这个问题设想?

标签: javaflutterdart

解决方案


您不能直接将 Java 库/类添加到 Flutter,或者反过来。Flutter 使用 Dart 而没有其他语言。

如果你想在 Android 上使用提供的 Java 代码,你必须自己构建一个 Flutter 插件。你可以在这里阅读如何做到这一点:https ://flutter.dev/docs/development/packages-and-plugins/developing-packages

但我怀疑你需要一个插件来生成 JWT,有很多处理 JWT 的包:https ://pub.dev/packages?q=jwt

关于您的依赖错误:

请下次发布堆栈跟踪,而不是屏幕截图。

dart_jsonwebtoken使用crypto比 Flutter 更旧版本的包。您可以尝试覆盖依赖项。

您可以在此处阅读有关一般依赖项和覆盖的信息:https ://dart.dev/tools/pub/dependencies


推荐阅读