【问题标题】:datastax cassandra java driver PlainTextAuthProvider exampledatastax cassandra java 驱动程序 PlainTextAuthProvider 示例
【发布时间】:2019-09-20 15:51:07
【问题描述】:

下面的代码出现异常,原因是

java.lang.IllegalArgumentException:预期类 com.datastax.driver.core.PlainTextAuthProvider(由 advanced.auth-provider.class 指定)是 com.datastax.oss.driver.api.core.auth 的子类型。身份验证提供者

import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.config.DefaultDriverOption;
import com.datastax.oss.driver.api.core.config.DriverConfigLoader;
import com.datastax.oss.driver.api.core.config.ProgrammaticDriverConfigLoaderBuilder;
import org.asynchttpclient.netty.ssl.DefaultSslEngineFactory;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
import com.datastax.driver.core.PlainTextAuthProvider;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Host;

import javax.net.ssl.SSLContext;
import java.security.KeyStore;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.net.ssl.TrustManagerFactory;
import com.datastax.driver.core.JdkSSLOptions;

import java.util.*;
import java.util.stream.Collectors;
import java.net.InetSocketAddress;
import com.datastax.oss.driver.internal.core.metadata.DefaultEndPoint;

    private void test_cqlsession(String trustStoreLocation, String password, List<String> ips) {

        ProgrammaticDriverConfigLoaderBuilder configBuilder = DriverConfigLoader
                .programmaticBuilder()
                .withClass(DefaultDriverOption.AUTH_PROVIDER_CLASS, PlainTextAuthProvider.class)
                .withString(DefaultDriverOption.AUTH_PROVIDER_USER_NAME, USER_NAME)
                .withString(DefaultDriverOption.AUTH_PROVIDER_PASSWORD, password)
                .withInt(DefaultDriverOption.CONNECTION_MAX_REQUESTS, 32768);

        if (trustStoreLocation != null) {
            configBuilder
                    .withClass(DefaultDriverOption.SSL_ENGINE_FACTORY_CLASS, DefaultSslEngineFactory.class)
                    .withString(DefaultDriverOption.SSL_TRUSTSTORE_PATH, trustStoreLocation)
                    .withString(DefaultDriverOption.SSL_TRUSTSTORE_PASSWORD, password);
        }

        CqlSession session = CqlSession.builder()
                .withConfigLoader(configBuilder.build())
                .addContactEndPoints(
                        Arrays.stream(ips.toArray())
                        .map(host -> new DefaultEndPoint(
                                InetSocketAddress.createUnresolved(host.toString(), 9042)))
                        .collect(Collectors.toList())
                )
                .withLocalDatacenter(DATA_CENTER)
                .build();

    .
    .
    .

}

我没有找到应该如何使用它的示例。

【问题讨论】:

    标签: java cassandra datastax-java-driver


    【解决方案1】:

    您的项目使用 2 个版本的 Java 驱动程序:3.x 和 4.x。您需要删除对驱动程序 3.x 的依赖,其中定义了 PlainTextAuthProvider

    还有,而不是:

    .withClass(DefaultDriverOption.AUTH_PROVIDER_CLASS, PlainTextAuthProvider.class)
                    .withString(DefaultDriverOption.AUTH_PROVIDER_USER_NAME, USER_NAME)
                    .withString(DefaultDriverOption.AUTH_PROVIDER_PASSWORD, password)
    

    在配置中,只需使用:

    CqlSession session =
        CqlSession.builder()
            .withAuthCredentials("user", "pass")
    

    documentation 中所述。

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 2017-01-26
      • 2017-07-13
      • 2014-05-04
      • 2016-02-27
      • 2017-01-20
      • 2017-08-12
      • 2016-12-24
      相关资源
      最近更新 更多