Redis令牌商店

时间:2015-11-17 10:48:44

标签: java spring oauth

我想在群集环境中部署我的REST API。为此,我需要将OAuth 2.0令牌存储在共享令牌存储中。目前我正在使用Spring Security的InMemoryTokenStore,它不能在多节点集群上共享。我打算用Redis存储令牌。

我发现最新版本的Spring-Security OAuth即2.8.0也提供了RedisTokenStore。我对此有些怀疑:

  1. 在现有的spring-security xml配置中使用RedisTokenStore需要进行哪些更改。目前我正在使用InMemoryTokenStore。

  2. 如何使RedisTokenStore与群集中的所有节点共享。

  3. 我可以使用Redis群集存储令牌,以防是吗?

1 个答案:

答案 0 :(得分:7)

关于第一个问题:

首先,给你一个关于redis令牌存储引用的spring-security xml示例

<!--Use Redis Token Store-->
<beans:bean id="tokenStore"
            class="org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore">
    <beans:constructor-arg name="connectionFactory" ref="redisConnectionFactory"/>
</beans:bean>

<!--create redis connection factory and set db 1-->
<beans:bean id="redisConnectionFactory"
            class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <beans:property name="hostName" value="localhost"/>
    <beans:property name="port" value="6379"/>
    <beans:property name="password" value=""/>
    <beans:property name="database" value="1"/>
</beans:bean>

其次,你需要将spring数据redis和jedis jar添加到你的项目中,我使用gradle,在依赖项中添加项目,如:

......
compile 'org.springframework.data:spring-data-redis:1.6.2.RELEASE'
compile 'redis.clients:jedis:2.8.0'
......

关于第二个问题:

如果一个群集的所有节点都使用一个reids服务器或群集,则您的访问令牌将在所有节点之间共享。您可以检查redis数据库数据,并跟踪访问过程以验证这一点。所以你不用担心。