2015-11-03 99 views
1

嘗試使用Spring Data Gosling(RELEASE)和Spring Data Cassandra(1.3.0.RELEASE,從父BOM導入)來完成概念驗證。我使用的配置類如下:無法在Apache Cassandra 2.2.x上進行身份驗證

@Configuration 
@PropertySource(value = { "classpath:/cassandra/cassandra.properties" }) 
@EnableCassandraRepositories(basePackages = { "com.test.repositories" }) 
public class CassandraConfiguration extends AbstractCassandraConfiguration { 

    @Autowired 
    private Environment environment; 

    @Bean 
    @Override 
    public CassandraClusterFactoryBean cluster() { 
     CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
     cluster.setUsername(environment.getProperty("cassandra.username")); 
     cluster.setPassword(environment.getProperty("cassandra.password")); 
     cluster.setContactPoints(environment.getProperty("cassandra.contactpoints")); 
     cluster.setPort(Integer.parseInt(environment.getProperty("cassandra.port"))); 
     return cluster; 
    } 

    @Override 
    protected String getKeyspaceName() { 
     return environment.getProperty("cassandra.keyspace"); 
    } 

    @Bean 
    @Override 
    public CassandraMappingContext cassandraMapping() throws ClassNotFoundException { 
     return new BasicCassandraMappingContext(); 
    } 

} 

啓動程序導致有關身份驗證的錯誤:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraTemplate' defined in com.objectway.dwx.datatest.config.CassandraConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.core.CassandraAdminOperations]: Factory method 'cassandraTemplate' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'session' defined in com.objectway.dwx.datatest.config.CassandraConfiguration: Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.AuthenticationException: Authentication error on host /127.0.0.1:9042: Host /127.0.0.1:9042 requires authentication, but no authenticator found in Cluster configuration 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) 
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84) 
    at com.objectway.dwx.datatest.main.Application.main(Application.java:13) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.cassandra.core.CassandraAdminOperations]: Factory method 'cassandraTemplate' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'session' defined in com.objectway.dwx.datatest.config.CassandraConfiguration: Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.AuthenticationException: Authentication error on host /127.0.0.1:9042: Host /127.0.0.1:9042 requires authentication, but no authenticator found in Cluster configuration 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 13 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'session' defined in com.objectway.dwx.datatest.config.CassandraConfiguration: Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.AuthenticationException: Authentication error on host /127.0.0.1:9042: Host /127.0.0.1:9042 requires authentication, but no authenticator found in Cluster configuration 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:294) 
    at com.objectway.dwx.datatest.config.CassandraConfiguration$$EnhancerBySpringCGLIB$$79ffe213.session(<generated>) 
    at org.springframework.data.cassandra.config.java.AbstractCassandraConfiguration.cassandraTemplate(AbstractCassandraConfiguration.java:85) 
    at com.objectway.dwx.datatest.config.CassandraConfiguration$$EnhancerBySpringCGLIB$$79ffe213.CGLIB$cassandraTemplate$7(<generated>) 
    at com.objectway.dwx.datatest.config.CassandraConfiguration$$EnhancerBySpringCGLIB$$79ffe213$$FastClassBySpringCGLIB$$f6ee548e.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:318) 
    at com.objectway.dwx.datatest.config.CassandraConfiguration$$EnhancerBySpringCGLIB$$79ffe213.cassandraTemplate(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 14 more 
Caused by: com.datastax.driver.core.exceptions.AuthenticationException: Authentication error on host /127.0.0.1:9042: Host /127.0.0.1:9042 requires authentication, but no authenticator found in Cluster configuration 
    at com.datastax.driver.core.AuthProvider$1.newAuthenticator(AuthProvider.java:39) 
    at com.datastax.driver.core.Connection$5.apply(Connection.java:259) 
    at com.datastax.driver.core.Connection$5.apply(Connection.java:246) 
    at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:863) 
    at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297) 
    at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156) 
    at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145) 
    at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:185) 
    at com.datastax.driver.core.Connection$Future.onSet(Connection.java:1183) 
    at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:1013) 
    at com.datastax.driver.core.Connection$Dispatcher.channelRead0(Connection.java:936) 
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) 
    at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:254) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) 
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) 
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) 
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847) 
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) 
    at java.lang.Thread.run(Thread.java:745) 

在卡桑德拉端使用AllowAllAuthentication完美的作品。當我使用PasswordAuthentication時出現問題。在Cassandra 2.2.x, 依賴關係分析顯示整個軟件包取決於Datastax cassandra-driver-dse 2.1.8版(另一方面,依賴於cassandra-driver-core 2.1.8)。強制驅動程序依賴於實際的2.2.0-rc3會導致其他問題,可能是因爲它仍處於不受支持的狀態。

我應該放棄使用C * 2.2的data-cassandra嗎? 謝謝。

回答

0

結果spring-data-cassandra 1.3.0.RELEASE可以對Apache Cassandra 2.2.x進行身份驗證 您只需構建一個AuthProvider對象。 DataStax驅動程序爲此接口提供了一個具體的實現:PlainTextAuthProvider。 最後的cluster()方法應該像這樣創建:

@Bean 
@Override 
public CassandraClusterFactoryBean cluster() { 
    CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
    PlainTextAuthProvider sap = new PlainTextAuthProvider(env.getProperty("cassandra.username"), env.getProperty("cassandra.password")); 
    cluster.setContactPoints(env.getProperty("cassandra.contactpoints")); 
    cluster.setPort(Integer.parseInt(env.getProperty("cassandra.port"))); 
    cluster.setAuthProvider(sap); 
    return cluster; 
} 
相關問題