首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Security With Cassandra - TimedOutException

Spring Security With Cassandra - TimedOutException
EN

Stack Overflow用户
提问于 2014-10-01 15:12:43
回答 1查看 756关注 0票数 0

我正在尝试通过Cassandra数据库使用spring安全来验证用户。我得到了以下异常:

代码语言:javascript
复制
Authentication request failed: org.springframework.security.authentication.AuthenticationServiceException: PreparedStatementCallback; SQL [select email, lastlogin, password, usertype from login where email=?]; TimedOutException(); nested exception is java.sql.SQLTransientConnectionException: TimedOutException()

我厌倦了不断增加的Cassandra超时和所有的一致性级别。我不明白是什么导致了这个错误,同样的查询在Cassandra DevCenter中工作得很好。

以下是配置详细信息:

使用的版本:

代码语言:javascript
复制
<properties>
    <java-version>1.7</java-version>
    <org.springframework-version>3.2.9.RELEASE</org.springframework-version>
    <org.aspectj-version>1.6.10</org.aspectj-version>
    <org.slf4j-version>1.6.6</org.slf4j-version>
    <cassandra-driver-core.version>1.0.5-dse</cassandra-driver-core.version>
    <jackson.databind-version>2.2.3</jackson.databind-version>
    <spring.security.version>3.2.3.RELEASE</spring.security.version>
</properties>

Cassandra对pom.xml的依赖:

代码语言:javascript
复制
<dependency>
    <groupId>org.apache-extras.cassandra-jdbc</groupId>
    <artifactId>cassandra-jdbc</artifactId>
    <version>1.2.5</version>
    <scope>compile</scope>
</dependency>

用于Spring安全的Cussandra数据源定义:

代码语言:javascript
复制
<beans:bean id="cassandraDataSource" class="org.apache.cassandra.cql.jdbc.CassandraDataSource">
    <beans:constructor-arg name="host" value="${cassandra.contactpoints}"></beans:constructor-arg>
    <beans:constructor-arg name="port" type="int" value="${cassandra.thriftport}"></beans:constructor-arg>
    <beans:constructor-arg name="keyspace" value="${cassandra.keyspace}"></beans:constructor-arg>
    <beans:constructor-arg name="user" value="${cassandra.user}"></beans:constructor-arg>
    <beans:constructor-arg name="password" value="${cassandra.password}"></beans:constructor-arg>
    <beans:constructor-arg name="version" value="${cassandra.version}"></beans:constructor-arg>
    <beans:constructor-arg name="consistency" value="${cassandra.consistency}"></beans:constructor-arg>     
</beans:bean>

Cussandra属性:

代码语言:javascript
复制
cassandra.contactpoints=127.0.0.1
cassandra.thriftport=9160
cassandra.port=9042
cassandra.keyspace=styling_bee
cassandra.user=cassandra
cassandra.password=cassandra
cassandra.version=2.0.0
cassandra.consistency=ALL

Spring安全配置:

代码语言:javascript
复制
<!-- enable use-expressions -->
<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/showyourcloset**" access="hasRole('ROLE_CLIENT')" />

    <!-- access denied page -->
    <access-denied-handler error-page="/403" />
    <form-login 
        login-page="/login" 
        default-target-url="/" 
        authentication-failure-url="/login?error" 
        username-parameter="email"
        password-parameter="password" />
    <logout logout-success-url="/login?logout"  />
    <!-- enable csrf protection -->
    <csrf/>
</http>

<!-- Select users and user_roles from database -->
<authentication-manager>
    <authentication-provider>

        <jdbc-user-service 
            data-source-ref="cassandraDataSource"
            users-by-username-query="select email, lastlogin, password, usertype from login where email=?"
            authorities-by-username-query="select roleid, email, rolename from user_roles where email=?" />

    </authentication-provider>
</authentication-manager>
EN

回答 1

Stack Overflow用户

发布于 2015-02-13 01:00:32

我不知道你是否已经找到了解决方案,但不管怎样,你走错了方向。相反,您必须根据http://docs.spring.io/autorepo/docs/spring-security/3.2.2.RELEASE/apidocs/org/springframework/security/core/userdetails/UserDetailsService.html实现您自己的UserDetailsService。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26135959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档