【问题标题】:Cassandra authentication issue after upgrading to Spring boot 2.3.5.RELEASE升级到 Spring boot 2.3.5.RELEASE 后的 Cassandra 身份验证问题
【发布时间】:2021-03-02 18:36:11
【问题描述】:

我们正在升级到 Spring boot 2.3.5.RELEASE。我们的应用程序将 cassandra 作为数据库之一,并且我们在节点上启用了身份验证。在更新 Spring Boot 版本后尝试连接到 casssandra db 时,出现此异常并且无法启动应用程序。

Authentication error on node <IP:PORT> requires authentication (org.apache.cassandra.auth.PasswordAuthenticator), but no authenticator configured

我的cassandra配置如下:

   @Configuration
   @ConfigurationProperties("spring.data.cassandra.keyspaceName")
   @EnableCassandraRepositories(basePackages = { "com.company.project.feature.cassandra.repo" }, 
    cassandraTemplateRef = "dbTemplate")
  public class Config extends AbstractCassandraConfiguration {

@Autowired
ServerProperties serverProps;

protected String contactPoints;
protected Integer port;
protected String keyspaceName;
protected String localDataCenter;


@Override
public String getContactPoints() {
    return contactPoints;
}

/**
 * @param contactPoints
 */
public void setContactPoints(String contactPoints) {
    this.contactPoints = contactPoints;
}

/**
 * @param keyspaceName
 */
public void setKeyspaceName(String keyspaceName) {
    this.keyspaceName = keyspaceName;
}

@Override
public String getKeyspaceName() {
    return keyspaceName;
}

@Override
public int getPort() {
    return port;
}

public void setLocalDataCenter(String localDataCenter) {
    this.localDataCenter = localDataCenter;
}

@Override
public String getLocalDataCenter() {
    return localDataCenter;
}

public void setPort(Integer port) {
    this.port = port;
}

@Bean(name = "dbSession")
@Primary
public CqlSession session() {

    String containerIpAddress = getContactPoints();
    int containerPort = getPort();
    InetSocketAddress containerEndPoint = new InetSocketAddress(containerIpAddress, containerPort);
    
    CqlSessionBuilder builder = CqlSession.builder().withLocalDatacenter(getLocalDataCenter()).addContactPoint(containerEndPoint)
    .withAuthCredentials(serverProps.getCassandraUserName(), serverProps.getCassandraPassword())
    .withKeyspace(getKeyspaceName());
    
    
    return builder.build();
}


@Bean("dbOperations")
public CassandraOperations cassandraOperationsB() {
    return new CassandraTemplate(session(), cassandraConverter());
}

@Primary
@Bean(name = "dbTemplate")
@Override
public CassandraAdminTemplate cassandraTemplate() {
    return new CassandraAdminTemplate(session(), cassandraConverter());
}

}

我在构建 CqlSession 时提供了用户名和密码,但仍面临此异常。是不是我做错了什么?

【问题讨论】:

    标签: java spring-boot cassandra


    【解决方案1】:

    在较旧的 Spring 数据版本中,您可以使用:CassandraClusterFactoryBean。但是这里有一个示例供将来使用,如果其他人偶然发现 spring data cassandra 3.0.1,用户名和密码身份验证为 spring data document 如果您滚动到页面末尾,那么您将看到 CassandraClusterFactoryBean 被删除,而不是我们现在有CqlSessionFactoryBean。所以示例代码看起来像

    import lombok.Getter;
    import lombok.Setter;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.cassandra.config.AbstractCassandraConfiguration;
    import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
    import org.springframework.data.cassandra.config.CqlSessionFactoryBean;
    
    @Configuration
    @EnableCassandraRepositories(basePackages = {"com.some.package"})
    @ConfigurationProperties(prefix = "spring.data.cassandra")
    @Getter
    @Setter
    public class CassandraConfig extends AbstractCassandraConfiguration {
    
        private String keyspaceName;
        private String contactPoints;
        private int port;
        private String localDataCenter;
        private String username;
        private String password;
    
        @Bean
        @Override
        public CqlSessionFactoryBean cassandraSession() {
            CqlSessionFactoryBean cassandraSession = super.cassandraSession();//super session should be called only once
            cassandraSession.setUsername(username);
            cassandraSession.setPassword(password);
            return cassandraSession;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 2019-04-03
      • 2021-09-15
      • 2019-02-13
      • 2021-03-08
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多