如何在集群环境中使用Spring Security OAuth

时间:2015-11-17 08:42:02

标签: java spring spring-security oauth-2.0

我正在使用在集群环境中无效的InMemoryTokenStore。我必须将令牌存储在我们可以在集群环境中轻松访问它的位置。

我无法使用JdbcTokenStore,因为我无法访问数据库。 我想要使​​用' Ehcache'或者' RedisTokenStore'。请帮助我哪种更好的方法以及如何使用它。

2 个答案:

答案 0 :(得分:1)

我在我的集​​群应用程序中使用了Apache Ignite data grid,它是JCache(JSR 107)规范的一个实现。

您可以通过以下方式设置缓存:

Ignite ignite = Ignition.ignite();
CacheConfiguration<CacheKey, Object> cacheCfg = new CacheConfiguration<CacheKey, Object>(cacheName.toString());
cacheCfg.setCacheMode(CacheMode.PARTITIONED);
cacheCfg.setBackups(1);
cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 604800)));
IgniteCache<CacheKey, Object> igniteCache = ignite.getOrCreateCache(cacheCfg);

然后您可以使用缓存来获取/放置OAuth2访问令牌,如下所示:

igniteCache.get(key);
igniteCache.put(key, o);

答案 1 :(得分:0)

  

首先,你有一个集群环境,这意味着,你的   应用程序正在处理严肃的业务逻辑。

inMemory数据从一个servlet container转换为另一个{<1}}实际上昂贵。好的是你已经意识到要提出更好的解决方案。

  

EhCache用于维护a中所有节点的缓存   集群环境。

     

EhCache本身不是一种缓存,只是一种工具。也,   EhCache没有维护缓存,只是触发了一些缓存   跨节点的动作/服务,以便每个节点都可以   重新刷新/更新自己的缓存。

  • 用于处理缓存一致性问题的技术 跨群集节点包括:
  • 每次需要时从商店(DB)中提取数据(没有缓存。)通常,这是一项昂贵的操作,并且 基于多用户Web的应用程序中的性能影响。
  • 通过以预先配置的时间间隔进行轮询和刷新,使本地缓存保持最新。
  • 跨群集节点复制缓存数据。
  • 根据分布式事件使本地缓存保持最新,该事件通知群集成员更改。
  

Redis在分布式环境中运行得非常好,特别是在   Redis SentinelRedis Cluster。我的建议是   Redis

这些教程将帮助您了解实施: